2017-12-27 382 views
-2

我从字符串解析ZoneOffset的两个对象。我如何总结它们并应用于ZonedDateTime我如何总结两个ZoneOffset?

例如:
原来ZonedDateTime是2017-12-27T18:30:00,第一偏移是+03,第二偏移+05

我怎样才能得到的2017-12-28T18:30:00+08:002017-12-28T10:30:00输出?

+3

这没有任何逻辑意义,不是吗?加上区域似乎不正确,你为什么要这么做? – luk2302

+0

我有数据阵列与偏移量不是指GMT + 0,I必须以某种方式处理它。 – San

+3

不过,这没有任何意义。唯一合理的做法是*在时区之间转换*日期。但+03 +05导致+08缺乏任何意义。 – luk2302

回答

2

我这样理解你的问题(请检查是否正确):你有一个ZonedDateTime与通常的UTC偏移量。我会称之为dateTimeWithBaseOffset。你已经有了另一ZonedDateTime与偏移相对于前ZonedDateTime的偏移。这真的是不正确的;该班级的设计者决定偏移量来自UTC,但有人用它与预期的不同。我会打电话给后者dateTimeWithOffsetFromBase

当然最好,如果你能解决这个问题产生dateTimeWithOffsetFromBase与非正统偏移的代码。我假设现在这不会是你可以使用的解决方案。因此,您需要将不正确的偏移量更正为UTC的偏移量。

它不坏:

ZoneOffset baseOffset = dateTimeWithBaseOffset.getOffset(); 
    ZoneOffset additionalOffset = dateTimeWithOffsetFromBase.getOffset(); 
    ZoneOffset correctedOffset = ZoneOffset.ofTotalSeconds(baseOffset.getTotalSeconds() 
      + additionalOffset.getTotalSeconds()); 

    OffsetDateTime correctedDateTime = dateTimeWithOffsetFromBase.toOffsetDateTime() 
      .withOffsetSameLocal(correctedOffset); 
    System.out.println(correctedDateTime); 

使用您的样本日期时间这个打印

2017-12-28T18:30+08:00 

如果你想在UTC时间:

correctedDateTime = correctedDateTime.withOffsetSameInstant(ZoneOffset.UTC); 
    System.out.println(correctedDateTime); 

这将打印的日期时间你问:

2017-12-28T10:30Z 

对于具有偏移量的日期时间,我们不需要使用ZonedDateTime,OffsetDateTime可以做的事情,并且可以更好地向读者沟通我们所达成的目标(尽管如此,ZonedDateTime也可以)。

+0

谢谢你的回答! – San