我认为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());
Run Code Online (Sandbox Code Playgroud)
我不明白为什么输出减去一个小时?
Original date: Sun Oct 23 11:00:00 BST 2011
Converted date: Sun Oct 23 11:00:00 BST 2011
Run Code Online (Sandbox Code Playgroud)
你正在使用Date.toString()哪个总是使用本地时区.看看你的字符串是如何包含"BST"的?
理想的情况下,坚持只约达时间尽可能多的时间,你可以:
Date除非您需要,否则不要转换回Date.toString(),如果你能可能避免它; 你无法控制它的格式.目前尚不清楚你真正想要实现的目标,但你几乎肯定不想做这么多的转换.例如,您toLocalDateTime()之后toDateTime()再次调用- 这意味着它在您在上一次转换中仔细指定了UTC之后使用系统默认时区...
您的代码包含以下转换(按此顺序):
您认为所有转换的必要性和正确指定的可能性是什么?;)