0

如果我有一个字符串日期:

2013-11-14T00:00:00.000

我可以使用什么日期格式来创建带有偏移量的日期?

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
dateFormat.setTimeZone(TimeZone.getDefault());
Date date = dateFormat.parse(myDate);

以上给出了无法解析的日期错误。

4

4 回答 4

2

最后.000的不是时区名称;它看起来像毫秒。尝试用毫秒Z替换时区名称。SSS

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
于 2013-11-14T22:17:38.793 回答
2
"yyyy-MM-dd'T'HH:mm:ss.SSS"

使用SSS毫秒并删除Z,因为日期字符串没有时区。

如果您打算以另一种格式打印/记录日期(例如,使用自定义时区),则必须使用另一个实例DateFormat

"yyyy-MM-dd'T'HH:mm:ss.SSS"  // to parse the date string
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" // to format the date object
于 2013-11-14T22:20:59.787 回答
0

您提供2013-11-14T00:00:00.000的未使用上述模式指定:"yyyy-MM-dd'T'HH:mm:ss.SSS Z"因为此模式的示例有效输入将是:

2013-11-14T00:00:00.000 -0700

删除Z或传递一个字符串作为提到的示例。

于 2013-11-14T22:23:51.587 回答
0

仅供参考,这是使用Joda-Time 2.3的同类代码。

Joda-Time 使用这种ISO 8601格式作为默认格式。不需要格式化程序来解析该字符串。只需将字符串传递给DateTime构造函数。构造函数自动调用内置的 ISO 格式化程序。

String input = "2013-11-14T00:00:00.000";

// Specify a time zone rather than rely on default.
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( input, timeZone );

System.out.println( "dateTime: " + dateTime );

运行时……</p>

dateTime: 2013-11-14T00:00:00.000+01:00

如果您需要 java.util.Date 与其他类一起使用,请从 Joda-Time 转换。

java.util.Date date = dateTime.toDate();
于 2014-02-03T10:22:18.717 回答