当前位置: 首页 > 面试题库 >

ZonedDateTime和OffsetDateTime有什么区别?

夏谦
2023-03-14
问题内容

我已经阅读了文档,但是当我应该使用其中一个时,还是不知道:

  • OffsetDateTime
  • ZonedDateTime

根据文档,OffsetDateTime在向数据库写入日期时应使用该文档,但我不知道为什么。


问题答案:

问:java 8 ZonedDateTime和OffsetDateTime有什么区别?

javadocs这样说:

OffsetDateTimeZonedDateTimeInstant所有商店的时间线,以纳秒的精度瞬间,Instant是最简单的,只是代表了瞬间。OffsetDateTime增加了即时从UTC
/格林威治,这使得能够获得当地的日期时间偏移。ZonedDateTime增加全职区规则”。

来源:https
:
//docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html

从而之间的差OffsetDateTimeZonedDateTime是,后者包括规则盖夏令时调整和各种其它异常现象。

简单地说:

时区
=(UTC偏移量 +异常规则)

问:OffsetDateTime将日期写入数据库时​​,应根据文档使用,但我不知道为什么。

具有本地时间偏移的日期始终表示同一时刻,因此具有稳定的顺序。相比之下,面对相应时区的规则进行调整时,具有完整时区信息的日期的含义就不稳定。(并且确实会发生这种情况;例如,将来的日期时间值。)因此,如果您存储然后检索一个ZonedDateTime实现,则会出现问题:

  • 它可以存储计算出的偏移量…,然后检索到的对象可能具有与zone-id的当前规则不一致的偏移量。

  • 它可以丢弃计算出的偏移量…,然后检索到的对象在绝对/通用时间轴中表示的点与所存储的不同。

如果使用Java对象序列化,则Java
9实现采用第一种方法。可以说这是处理此问题的“更正确”的方法,但是似乎没有记录在案。(JDBC驱动程序和ORM绑定可能正在做出类似的决定,并有望正确解决。)

但是,如果您正在编写一个手动存储日期/时间值或依赖的应用程序java.sql.DateTime,那么可能会避免区域ID的复杂性。因此,建议。

请注意,其含义/顺序随时间推移 不稳定的日期 可能会对 应用程序 造成
问题。而且由于更改区域规则只是边缘情况,因此这些问题很可能在意外的时候出现。

提出建议的(可能)第二个原因是a的构造ZonedDateTime在某些时候是模棱两可的。例如,在您“放回时钟”的时间段中,将本地时间和zone-
id组合可以为您提供两个不同的偏移量。该ZonedDateTime会一贯挑一个比其他…但是这并不总是正确的选择。

现在,对于以ZonedDateTime这种方式构造值的任何应用程序来说,这可能都是个问题。但是从某个人构建企业应用程序的角度来看,当(可能不正确的)ZonedDateTime值保持不变并在以后使用时,这是一个更大的问题。



 类似资料:
  • 我们创建了一个DateTime类来保存库中的DateTime。该值通常来自SQL数据库(所以UTC)或XML(可以有偏移量)。但它也可以是具有明确时区的日期时间(如丹佛)。 在我们的课堂上,我们把它作为OffsetDateTime,我认为这是最好的,因为98%的时间我们得到的是一个已知偏移量的显式瞬间,没有区域。 当它使用ZonedDateTime初始化时,我想我们将其保存为OffsetDateT

  • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。

  • 本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块  

  • 问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。

  • 发展至今(2020 年 6 月份),GCC 编译器已经更新至 10.1.0 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。 除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序,甚至于 GCC 6 以及之前的版本还支持编译 Java 程序。但本

  • 问题内容: 比较PMD和CheckStyle有一个问题。但是,我找不到关于PMD和FindBugs之间差异/相似性的详尽分类。我相信一个关键的区别是PMD适用于源代码,而FindBugs适用于编译的字节码文件。但是就功能而言,这应该是一个选择,还是两者相辅相成? 问题答案: 我同时使用。我认为他们是相辅相成的。 正如您所说,PMD在源代码上工作,因此会发现诸如以下问题:违反命名约定,缺少花括号,放