我认为2011-10-23 12:00:00
将与UTC
保持一致,Converted date
将 2011-10-23 17:00:00
。
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt = formatter.parse("2011-10-23 12:00:00");
LocalDateTime ldt = new DateTime(dt).withZone(DateTimeZone.UTC).toLocalDateTime();
LOGGER.warn("Original date: " + ldt.toDateTime().toDate().toString());
DateTime cvtldt = ldt.toDateTime(DateTimeZone.forID("-05:00"));
LOGGER.warn("Converted date: " + cvtldt.toLocalDateTime().toDateTime().toDate().toString());
我不明白为什么输出减去一个小时?
Original date: Sun Oct 23 11:00:00 BST 2011
Converted date: Sun Oct 23 11:00:00 BST 2011
答案 0 :(得分:6)
您正在使用Date.toString()
始终使用本地时区。看看你的字符串如何包含“BST”?
理想情况下,尽可能多地坚持只是 Joda Time:
Date
Date.toString()
;你无法控制它的格式。目前尚不清楚你真正想要实现的目标,但你几乎肯定不想做这么多次转换。例如,您在再次调用toLocalDateTime()
之后再调用toDateTime()
- 这意味着您在之前的转换中仔细指定了UTC之后使用系统默认时区...
您的代码包含以下转换(按此顺序):
您认为所有转换的必要性和正确指定的可能性是什么? ;)
答案 1 :(得分:0)
原因已更改,因为转换为UTC是针对主机时区完成的,因此应该更改。
转换已经改变了,实际上这是访问方法的问题。 您正在获得基准时间,修改器存储在其他字段中。
尝试进入调试模式,转换后会看到cvtldt to toString with modifier。
此致 Grzesiek