我有下面的代码
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:00 IST 我希望返回Sun Apr 01 00:00:00 IST 2012
我怎样才能得到这个?
最佳答案
首先,您不应使用 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
关于java - DateTimeFormatter 的 withZone(DateTimeZone.UTC) 更改日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588770/