我们有一个客户端以字符串格式向我们发送日期为{{ mylist.2 }} for 3rd value
。我们需要在使用它之前将其转换为JAVA Date类型。
我们正在以这种方式解析:
"2017-06-14T04:00:00-08:00"
但是在解析之后我们正在失去偏移量。当我们将它转换回字符串时,我们看到了价值:
2017-06-14T08:00:00-04:00
如何在不改变偏移的情况下在JAVA中从SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
dateParsedFromString = formatter.parse("2017-06-14T04:00:00-08:00");
转换为String
?
答案 0 :(得分:1)
java.util.Date
不会存储时区信息。
要保留时区,请使用ZonedDateTime
或OffsetDateTime
(Java 8 +)。
由于您的日期字符串为ISO 8601,因此您甚至无需指定日期格式。
ZonedDateTime zdt = ZonedDateTime.parse("2017-06-14T04:00:00-08:00");
System.out.println(zdt); // prints: 2017-06-14T04:00-08:00
OffsetDateTime odt = OffsetDateTime.parse("2017-06-14T04:00:00-08:00");
System.out.println(odt); // prints: 2017-06-14T04:00-08:00
对于Java 8之前的版本,请使用ThreeTen-Backport:
ThreeTen-Backport为Java SE 6和7提供了Java SE 8日期时间类的后端。