我有以下代码
final DateTimeFormatter COMBINED_FORMAT = ISODateTimeFormat.dateTimeParser().withZone(
DateTimeZone.UTC);
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000").toDate());
结果 Sun Apr 01 05:30:00 IST 2012 我希望这会返回 Sun Apr 01 00:00:00 IST 2012
我怎么能得到这个?
答案 0 :(得分:2)
首先,您不应使用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