currentTimeMillis 与日历

currentTimeMillis vs Calendar

我一直在构建一个应用程序并保存重要的时间信息,我一直在使用 System.currentTimeMillis() 来获取以毫秒为单位的时间戳。我所有的算法都使用此 ms 数据,并且日期与此 ms 数据一起保存。还确定缓存的持续时间,并根据此毫秒时间戳格式化对象日期。

不过我不确定这是否是一个好的做法。是不是用Calendar.getinstace()

比较好

我了解到 currentTimeMillis() 可能是一种不好的做法,因为它会导致时间数据不一致,但我不明白这是为什么。

日历总是不好的做法。

Java 有 3 到 4 API 秒的时间。介绍顺序:

  • System.currentTimeMillis()
  • (与上述一起):java.util.Date 稍后,java.sql.Timestamp 和日期。这很糟糕API;在这一点上,几乎所有这些方法都被弃用了,因为它们具有误导性,或者直接不按照他们的建议去做,并且在任何情况下都是巨大的用词不当。 j.u.Date 代表一个瞬间,不容易用人类的术语来表示。日期基本上是人类的概念。
  • 日历。尝试解决问题。实际上使情况变得更糟: API 具有误导性和令人惊讶(.set(MONTH, 1) 会将月份设置为.. Februari!),并且完全不符合惯用语,使用 .set/.get 额外具有 'field' 概念且具有可变类型的参数)。这个API的实际代表性还是有限的
  • JSR310,a.k.a。 java.time这个 不错。这几乎没有什么惊喜,它很复杂,时间实际上很复杂,类型被正确命名,甚至有 j.t.Instantj.t.ZonedDateTime,你几乎可以表达任何与日期相关的东西。

我想说的是,强烈不建议使用 j.u.Date 或日历。如果你所做的只是及时测量瞬间,请随意坚持使用 System.currentTimeMillis() - 但如果你需要以人类形式打印它(例如:“在 2020-07-20 16:34,这件事发生了”),改用 java.time。如果您愿意,请随意放弃 currentTimeMillis 并使用 j.t.Instant 代替 - 您的偏好。