我有一个下面的代码
final DateTimeFormatter COMBINED_FORMAT = ISODateTimeFormat.dateTimeParser().withZone(
DateTimeZone.UTC);
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000").toDate());
结果是2012年4月1日星期日东部标准时间05:30我预计这将返回2012年4月1日星期日00:00:00 IST
我怎么能拿到这个?
首先,不应该使用java.util.Date.toString()
(在示例中隐式使用)来评估结果。原因是它总是在系统时区输出,而不是结果的真实状态。
第二:如果将区域设置为UTC,则指示解析器将无区域字符串"2012-04-01T00:00:00.000"解释为UTC,而不是IST。看看你的结果状态:
DateTimeFormatter COMBINED_FORMAT =
ISODateTimeFormat.dateTimeParser().withZone(DateTimeZone.UTC);
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000"));
// 2012-04-01T00:00:00.000Z
但是,如果希望结果为"Sun Apr 01 00:00:00 IST 2012"(date.toString()的输出)或等效结果:"2012-04-01T00:00:00+05:30",则必须指示解析器将输入解释为IST,而不是UTC。
解决方案:
DateTimeFormatter COMBINED_FORMAT =
ISODateTimeFormat.dateTimeParser().withZone(DateTimeZone.forID("Asia/Kolkata"));
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000"));
// 2012-04-01T00:00:00.000+05:30