如何解析包含Joda时间的时区日期
问题描述:
这段代码始终将日期解析到当前时区,而不是解析到正在解析的字符串中的时区。如何解析包含Joda时间的时区日期
final DateTimeFormatter df = DateTimeFormat
.forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy");
final DateTime dateTime = df
.parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009");
System.out.println("dateTime = " + dateTime);
// outputs dateTime = 2009-08-24T04:36:46.000+02:00
它输出:
dateTime = 2009-08-24T04:36:46.000+02:00
,而我预计:
dateTime = 2009-08-24T04:36:46.000+10:00
任何想法我做错了吗?
答
OK,进一步谷歌搜索给我的回答我自己的问题:使用withOffsetParsed()
,像这样:
final DateTimeFormatter df = DateTimeFormat
.forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy");
final DateTime dateTime = df.withOffsetParsed()
.parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009");
这工作。
答
,你也可以选择:
// parse using the Paris zone
DateTime date = formatter.withZone(DateTimeZone.forID("Europe/Paris")).parseDateTime(str);
你应该接受你的答案。 – 2012-11-15 09:21:25
感谢:D你是一个真正的! – mgonto 2013-07-31 17:34:44
IMO,“DateTimeFormatter”的默认行为似乎违反了“最不惊人的原则”,特别是在解组器的上下文中。谢谢史蒂夫发掘'withOffsetParsed()'。 – 2015-05-20 02:46:10