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

Java日期和时间API有什么问题?

斜高翰
2023-03-14
问题内容

我经常遇到对Java Date和其他与日期时间相关的类的负面反馈。作为.NET开发人员,我无法完全理解(不使用它们)它们到底有什么问题。

有人能对此有所启发吗?


问题答案:

Java Date类。最好的例子之一就是如何不以任何语言在任何地方做某事。我该从哪里开始?

阅读JavaDoc可能会使人们认为开发人员实际上有了一些好主意。它接着约之间的区别UTC和GMT在长度,尽管两者之间的差别基本上是闰秒(这发生非常 罕见)。

但是,设计决定实际上是在浪费任何被认为是设计良好的API的想法。以下是一些最喜欢的错误:

  • 尽管在上个千年的最后十年中进行了设计,但自1900年以来,它的年数一直是两位数。由于这个平庸的决定,在Java世界中确实有数百万种变通方法在进行1900+(或1900-)的开发
  • 月被索引为零,以迎合一个异常的情况,即月数组不包含13个元素的数组,其中第一个元素包含null。结果,我们有0..11(今天是109年的第11个月)。为了转换为字符串,在月份中有类似数量的++和-。
  • 他们是可变的。结果,任何时候你想要返回一个日期(例如,作为实例结构),都需要返回该日期的副本,而不是日期对象本身(否则,人们可以更改你的结构)。
  • Calendar,旨在“修复”这一点,实际上使同样的错误。他们仍然是可变的。
  • Date代表DateTime,但为了顺应SQL领域的需求,还有另一个子类java.sql.Date,代表了一天(尽管没有与之关联的时区)。
  • 没有TimeZone与关联的Date,因此范围(例如“全天”)通常表示为午夜至午夜(通常在任意时区)

最后,值得注意的是,leap秒通常会在一个小时之内用ntp更新的良好系统时钟纠正自身(请参见下面的链接)。在引入两个leap跃秒(最少每六个月,实际上每隔几年)的情况下,系统仍然可以运行的可能性非常小,尤其是考虑到必须不时重新部署新版本的代码这一事实。即使使用重新生成类或诸如WAR引擎之类的动态语言,也会污染类空间并最终耗尽permgen。



 类似资料:
  • 问题内容: 我注意到Java 7API的快照已经在java.sun.com上发布了一段时间,但是我只是在最近浏览了一下,专门寻找了受JodaTime启发的Date/ Time API。las,我在发布的文档中找不到任何提及。 是因为还没有完成,并且此发布的API是早期的,不完整的快照,还是因为这个想法已被悄悄放弃? 问题答案: 亚历克斯·米勒(AlexMiller)正在运行一个有关jdk7功能的非

  • 问题内容: Java 8中新的Date Time API的功能之一应该是纳秒级精度。但是当我像这样将当前日期时间打印到控制台时 我只看到毫秒精度:2015-11-02T12:33:26,746000000 + 0100 操作系统似乎确实支持纳秒精度。当我通过终端打印当前日期时间时 我看到2015-11-02T12:33:26,746134417 + 0100 如何在Java中获得纳秒精度?我在Ub

  • 问题内容: 我有一个JDBC Date列,如果我使用getDate只能在 2009年10月2日* 得到’ date ‘部分,但是如果我使用getTimestamp我就可以得到完整的’ date ‘ 2009年10月2日13:56:78:890 。这正是我想要的。 __ *** 但是,getTimestamp返回的“日期”会“忽略” GMT值(假设为日期); 2009年10月2日13:56:78:8

  • 让我一起学习一个新的内建对象:日期(Date)。该对象存储日期和时间,并提供了日期/时间的管理方法。 例如,我们可以使用它来存储创建/修改时间,或者用来测量时间,再或者仅用来打印当前时间。 创建 创建一个新的 Date 对象,只需要调用 new Date(),在调用时可以带有下面这些参数之一: new Date() 不带参数 —— 创建一个表示当前日期和时间的 Date 对象: let now =

  • 日期和时间 日期、时间、时间戳的值支持ISO 8601格式,格式还包含了时区: CALL TIMESTAMP '2008-01-01 12:00:00+01:00'; 如果未设置时区,将使用系统中当前的时区。日期和时间信息存储在 H2 数据库文件,不包含时区信息。如果数据库打开使用另一个系统时区,日期和时间将是相同的。这意味着如果你存储的值“2000-01-01 12:00:00”在一个时区,然

  • PHP 中 DateTime 类的作用是在你读、写、比较或者计算日期和时间时提供帮助。除了 DateTime 类之外,PHP 还有很多与日期和时间相关的函数,但 DateTime 类为大多数常规使用提供了优秀的面向对象接口。它还可以处理时区,不过这并不在这篇简短的介绍之内。 在使用 DateTime 之前,通过 createFromFormat() 工厂方法将原始的日期与时间字符串转换为对象或使用