String input = "2018-01-02T00:03" ; // Text of a date with time-of-day but without any context of time zore or offset-from-UTC. *Not* a moment, *not* a point on the timeline.
LocalDateTime ldt = LocalDateTime.parse( input ) ; // Parsing the input as a `LocalDateTime`, a class representing a date with time but no zone/offset. Again, this does *not* represent a moment, is *not* a point on the timeline.
协调世界时
根据问题中给出的事实,我们知道这个日期和时间意在代表世界协调时的一个时刻。因此,我们可以为 UTC 本身分配从 UTC 偏移到0小时-分钟-秒的上下文。我们应用一个 ZoneOffset常量 UTC来得到一个 OffsetDateTime对象。
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ); // We are certain this text was intended to represent a moment in UTC. So correct the faulty text input by assigning the context of an offset of zero, for UTC itself.
ZoneId z = ZoneId.of( "America/Chicago" ) ; // Adjust from UTC to a time zone where the wall-clock time is six hours behind UTC.
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
让我们来举一个例子,使用冰岛的时区使用从 UTC 的偏移量0小时-分钟-秒。因此,区域 Atlantic/Reykjavik的挂钟时间与 UTC 相同。至少现在他们的挂钟时间与世界协调时相匹配; 在过去或将来,它可能是不同的,这就是为什么说“世界协调时 是冰岛的时区”是不正确的。无论如何,我们的例子... 说有人在 冰岛雷克雅未克与午夜后3分钟挂在他们的墙上的时钟打电话给某人在美国。那个美国人住在一个使用芝加哥地区时区的地方。当接电话的人拿起电话时,他们会抬头看一眼挂在墙上的时钟,看看时间刚过下午6点(18:03)。同样的时间,不同的挂钟时间。