1

我有一个日期和时间选择器,我使用这两个构建一个字符串日期。这是一个示例日期和时间字符串。

"11/6/2013 09:23"

现在我需要将它们转换为日期并将它们转换为这种格式“yyyy-MM-dd'T'HH:mm:ss.SSS”。

我的问题是我的 logcat 中出现此错误:

11-06 21:23:53.060: E/Error(26255): Unparseable date: "11/6/2013 09:23" (at offset 2)

我正在使用此代码将字符串转换为日期,并将日期转换为格式化的字符串。

Date d = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault()).parse(etaToDeliverArrivedAtShipper.getText().toString());
ETAtoNextStop = d.toString();

当我使用新日期并获取当前日期时,它工作正常。我猜我的字符串的格式是错误的。但我以这种格式在编辑文本上显示它。我想保持这种状态。无论如何将此字符串格式转换为日期?有什么想法吗?谢谢!

4

3 回答 3

0

我认为您正在尝试同时做两件事。为了将任何字符串转换为不同格式的另一个字符串,您需要:

使用包含当前格式的 DateFormat 解析字符串,这将返回 Date;然后获取您新获得的日期并将其格式化为所需的 DateFormat

SimpleDateFormat formatOne = new SimpleDateFormat("dd/MM/yyyy HH:mm");
Date date = formatOne.parse(etaToDeliverArrivedAtShipper.getText().toString());
SimpleDateFormat formatTwo = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS",Locale.getDefault());
String result = formatTwo.format(date)
于 2013-11-06T13:43:11.693 回答
0

您正在尝试解析,yyyy-MM-dd'T'HH:mm:ss.SSS但事实并非如此。可能是yyyy/M/dd HH:mm:ss

你可能想要的是:

Date d = new SimpleDateFormat("yyyy/M/dd HH:mm:ss", Locale.getDefault()).parse(etaToDeliverArrivedAtShipper.getText().toString());
ETAtoNextStop = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault()).format(d);
于 2013-11-06T13:44:05.807 回答
0

这仅仅是因为您的模式与您尝试解析的日期字符串不匹配。您的模式中有 3 个错误:

  • 你使用MM这意味着月份应该是两位数,而日期只有一位
  • 你使用.SSS这意味着有毫秒但你的日期不是那么精确
  • 您使用了错误的分隔符

所以正确的模式应该是:yyyy/M/dd HH:mm:ss

要获得所需的格式,然后SimpleDateFormat使用所需的模式创建一个新对象,并使用parse(Date)方法为其提供Date先前由parse().

于 2013-11-06T13:40:48.323 回答