从日期和时间选择器转换日期字符串构建

时间:2013-11-06 13:29:08

标签: java android datetime datetime-format

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

"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();

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

3 个答案:

答案 0 :(得分:0)

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

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

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

要获得所需格式,请使用所需模式创建新的SimpleDateFormat对象,并使用parse(Date)方法为其提供Date之前返回的parse()对象。

答案 1 :(得分:0)

我想你一下子要做两件事。要将任何String转换为另一种不同格式的String,您需要:

使用包含当前格式的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)

答案 2 :(得分: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);