解析字符串到目前为止,时区偏移完好无损

时间:2017-05-17 07:34:25

标签: java

我们有一个客户端以字符串格式向我们发送日期为{{ 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

1 个答案:

答案 0 :(得分:1)

java.util.Date不会存储时区信息。

要保留时区,请使用ZonedDateTimeOffsetDateTime(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日期时间类的后端。