如果我有字符串日期:
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);
上面给出了一个不可解决的日期错误。
答案 0 :(得分:2)
最后.000
不是时区指定;它看起来像毫秒。尝试将Z
时区指定替换为SSS
for milliseconds。
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
答案 1 :(得分: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
答案 2 :(得分:0)
您提供的2013-11-14T00:00:00.000
未使用上述模式指定:"yyyy-MM-dd'T'HH:mm:ss.SSS Z"
因为此模式的示例有效输入将为:
2013-11-14T00:00:00.000 -0700
删除Z
或传递一个字符串作为上述样本。
答案 3 :(得分: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 );
跑步时......
dateTime: 2013-11-14T00:00:00.000+01:00
如果您需要java.util.Date与其他类一起使用,请从Joda-Time转换。
java.util.Date date = dateTime.toDate();