如何将Date转换为ZonedDateTime?

时间:2015-08-20 20:33:00

标签: java

我有各种java.util.Date个对象,其格式为2014-01-21 10:28:57.122Z。我想将它们全部转换为ZonedDateTime个对象。

根据this SO问题和ZonedDateTime's ofInstant(),有一种方式是这样的:

ZonedDateTime z = ZonedDateTime.ofInstant(dateObject.toInstant(), ZoneId);

问题是,如何确定ZoneId参数的用途?我无法使用系统时间(ZoneId.systemDefault()),因为我的Date个对象都有不同的时区。

1 个答案:

答案 0 :(得分:5)

您的java.util.Date对象有时区。日期始终以UTC格式存储在内部。

当您将文本字符串解析为Date对象时,解析器会将时区(如文本中给出的)作为参数应用于解析器,或者默认情况下。

当您显示Date对象时,格式化程序将在请求的时区内生成所请求的文本,无论时区是否显示。

因此,如果Date对象中没有时区信息,必须指定转换为ZonedDateTime时所需的时区。

更好的是,将文本直接解析为ZonedDateTime,因此可以记住文本中的原始时区。