如何将Date转换为ZonedDateTime?

yiw*_*wei 3 java

我有各种java.util.Date具有这种格式值的对象:2014-01-21 10:28:57.122Z.我想将它们全部转换为ZonedDateTime对象.

根据该 SO问题,ZonedDateTime的ofInstant(),一种方式是像这样:

ZonedDateTime z = ZonedDateTime.ofInstant(dateObject.toInstant(), ZoneId);
Run Code Online (Sandbox Code Playgroud)

问题是,我如何找出ZoneId参数的用途?我不能使用我的系统时间(ZoneId.systemDefault())因为我的Date对象都有不同的时区.

And*_*eas 6

你的java.util.Date对象并没有有一个时区.日期始终以UTC格式存储在内部.

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

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

因此,在没有时区信息Date的对象,你必须指定转换,当你需要的时区ZonedDateTime.

更好的是,将文本直接解析为ZonedDateTime,以便它可以记住文本中的原始时区.