use*_*786 0 java datetime calendar timezone-offset java-8
我在字符串中获取时间和偏移量。
时间采用 UTC 格式,我必须根据偏移量转换该时间,然后将其分配给一个Calendar对象。
问题是我正在使用类plusHours()方法OffsetDateTime。我得到相同的结果。
OffsetDateTime odtB = OffsetDateTime.parse( "2018-03-26T06:00:00Z" ) ;
odtB.plusHours(2);
System.out.println(odtB);
Run Code Online (Sandbox Code Playgroud)
例如,如果我的日期是"2018-03-26T06:00:00Z"并且偏移/时区值为“+02:00”,如何更改它以获取输出"2018-03-26T08:00:00Z"?
首先,该plusHours方法返回另一个 OffsetDateTime,但它不会更改原始的。要获取该方法的结果,您需要将其分配给一个变量:
OffsetDateTime odtB = OffsetDateTime.parse("2018-03-26T06:00:00Z");
odtB = odtB.plusHours(2);
System.out.println(odtB);
Run Code Online (Sandbox Code Playgroud)
这将打印:
2018-03-26T08:00Z
现在回答你的问题:
例如,如果我的日期是“2018-03-26T06:00:00Z”并且偏移/时区值是“+02:00”,如何更改它以获得输出“2018-03-26T08:00:00Z”?
我认为你误解了一些概念。Z最后的 是UTC指示符,与 相同+00:00。
上面的日期 (2018-03-26T06:00:00Z和2018-03-26T08:00Z) 均采用 UTC 格式,每个日期代表不同的时刻(时间线中的不同点)。当您致电 时plusHours(2),结果是OffsetDateTime第一个结果 2 小时后的另一个结果。
如果您想将转换为OffsetDateTime另一个偏移量,则不应为其添加小时数。你应该做这个:
OffsetDateTime odtB = OffsetDateTime.parse("2018-03-26T06:00:00Z");
// convert to offset +02:00
odtB = odtB.withOffsetSameInstant(ZoneOffset.ofHours(2));
Run Code Online (Sandbox Code Playgroud)
现在的结果是2018-03-26T08:00+02:00- 请注意,偏移量从 Z 更改为 +02:00,但 (2018-03-26T08:00+02:00和2018-03-26T06:00:00Z) 都表示同一时刻(时间轴中的同一点)。
如果您使用(一种检查日期是否对应于同一时刻的isEqual方法)比较结果,这一点会变得更清楚:
OffsetDateTime odtB = OffsetDateTime.parse("2018-03-26T06:00:00Z");
// add hours
OffsetDateTime twoHoursLater = odtB.plusHours(2);
System.out.println(odtB.isEqual(twoHoursLater)); // false
// convert to offset +02:00
OffsetDateTime sameInstantDifferentOffset = odtB.withOffsetSameInstant(ZoneOffset.ofHours(2));
System.out.println(odtB.isEqual(sameInstantDifferentOffset)); // true
Run Code Online (Sandbox Code Playgroud)
要转换为其他偏移量,例如+05:30,您只需更改所使用的偏移量即可。ZoneOffset.ofHours(2)您可以使用其中之一来代替:
ZoneOffset.ofHoursMinutes(5, 30)
ZoneOffset.of("+05:30")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7003 次 |
| 最近记录: |