日历 getTime 方法修改时区



我有一个问题,即Calendar.getTime((方法更改时区(可能与JVM一致(。

Calendar cal  = javax.xml.bind.DatatypeConverter.parseDateTime("2017-10-20T07:10:08.123458Z");
Date datrFromCal = cal.getTime();//Adds two hours(GMT+2:00)

调用cal.getTime()时,有没有办法阻止从 GMT+0 到 GMT+2 的这种运动?

附言我们公司使用Java 7。

与此相关的另一件事是对微秒的支持。我已经阅读了很多关于Java 7及以下不支持微秒(解析字符串时(的信息,但是有什么建议可以解决这个问题吗?

不是

Date有时区。日期只是自"纪元"(格林威治标准时间 1970 年 1 月 1 日(以来的毫秒数。它们不包含时区信息。只有在设置显示日期格式时,才会看到时区。默认情况下,它使用区域设置的时区。您可以使用SimpleDateFormat打印具有不同LocaleTimeZone的日期。

确保您的Calendar实例具有正确的TimeZone(例如,您可能必须显式设置它:cal.setTimeZone(TimeZone.getTimeZone("GMT"));(。

如果我是你,我会切换到Joda时间库或ThreeTen Backport,并使用设计更好的java.time。内置的java.util.Date/Calendar类是一场噩梦。它们设计不佳且可变,这意味着您不能将它们作为要传递的值对象。

虽然我同意@ELEVATE,但我必须补充一点,iso 8601 日期格式使用时区。

我们可以看到您正在使用"Z"指示器有效地设置时区,但没有指定它。因此,日历是使用您当地的时区构建的,但时间定义为 UTC(如果您愿意,也可以定义 GMT,因此在您的情况下为 GMT+2h00(。

但是,如果您删除"Z"指示符,则将按原样设置时区设置时间。

例如,请参阅 https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators

最新更新