DateTimeFormatter的Zone(DateTimeZone.UTC)更改日期值



我有一个下面的代码

    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

最新更新