【发布时间】:2016-03-15 23:58:25
【问题描述】:
我通过 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(DateinString) 将日期字符串转换为日期。
这里不是转换为 UTC,而是转换为我的本地时区。我通过 DateFormat 的格式方法显示这个解析的日期来检查它。
所以我必须将其重新格式化回 UTC。现在,当我尝试通过相同的格式方法将此解析后的日期显示为 UTC 时区时,它仍然显示在本地时区中。以下是我将解析日期格式化为 UTC 的代码-
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.setTime(alreadyParsedDateTime); //
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime()));
我的示例日期字符串是“2015-12-23T15:00:00-0800”
解析后 -- alreadyParsedDateTime.toString():: Thu Dec 24 04:30:00 IST 2015
解析后——
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(alreadyParsedDateTime)):: 2015-12-24T04:30:00
经过上面提到的将解析日期重新格式化为UTC-- System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime())):: 2015-12-24T04:30:00
预计日期格式为:: 2015-12-23T23:00:00
我不知道为什么格式化方法不能以预期的方式工作,或者有什么技巧可以做到这一点。请帮忙..
【问题讨论】:
-
查看
DateFormat(以及SimpleDateFormat)的setTimeZone()方法。 -
仅供参考,麻烦的旧日期时间类,如
java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 和 Java 9 中内置的 java.time 类所取代。参见 @987654324 @.