首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ZonedDateTime转换为ZonedDateTime

从ZonedDateTime转换为ZonedDateTime
EN

Stack Overflow用户
提问于 2019-03-14 13:20:15
回答 1查看 386关注 0票数 0

Excel中的日期时间保存为自1900-01-01 (+1,如它认为1900-02-29发生)以来的天数。数字中的分数是一天中偏移的时间。

这个数字没有时区的概念。所以12.5是1900-01-12T12:00:00在您打开电子表格的时区。在科罗拉多打开它就会看到正午。打开它在德国,它是正午。这不是瞬间,而是一个LocalDateTime。

对于我们的系统,我们将所有东西存储为OffsetDateTime或ZonedDateTime (取决于日期时间是如何传递给我们的),我认为应该做的逻辑事情是从这里创建一个ZonedDateTime。

这就引出了一个问题:如何在本地时区中创建一个ZonedDateTime,设置为这个ZonedDateTime编号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-15 11:26:23

代码语言:javascript
复制
    LocalDate msBaseDate = LocalDate.of(1899, Month.DECEMBER, 31);

    double dateFromExcel = 12.5;
    long nanosSinceBase = Math.round(dateFromExcel * TimeUnit.DAYS.toNanos(1));
    ZonedDateTime dateTime = msBaseDate.atStartOfDay()
            .plusNanos(nanosSinceBase)
            .atZone(ZoneId.systemDefault());

    System.out.println(dateTime);

在我的计算机上,输出是:

1900-01-12T12:00+01:00欧洲/哥本哈根

因为java.time只使用整数,所以我使用了它的最细粒度,纳秒。这将使2192年的long溢出,因此对于未来的解决方案,您可以考虑单独添加一整天,只将分数转换为nanos。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55163639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档