1

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

我不确定这是否是一个好习惯。是不是更好用Calendar.getinstace()

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

4

1 回答 1

4

日历总是不好的做法。

Java 有 3 到 4 个时间 API。按介绍顺序:

  • System.currentTimeMillis()
  • (连同上述):java.util.Date稍后,java.sql.Timestamp还有日期。这是非常糟糕的 API;在这一点上,这些方法中的几乎所有方法都已被弃用,因为它们具有误导性或直接不做他们建议的事情,并且在任何情况下都是巨大的误称。j.u.Date代表时间的瞬间,用人类的术语不容易表示。日期基本上是人类的概念。
  • 日历。尝试解决问题。实际上更糟糕的是:API 具有误导性和令人惊讶(.set(MONTH, 1) 会将月份设置为.. Februari!),并且完全不习惯使用 .set/.get 和带有 ' 的额外参数字段的概念,并且具有可变类型)。这个 API 的实际表现力仍然有限。
  • JSR310,又名java.time. 是一个很好的。这几乎没有什么意外,很复杂,时间最终变得复杂,类型被正确命名,甚至同时具有j.t.Instantand j.t.ZonedDateTime,并且您几乎可以表达任何与日期相关的内容。

我会说强烈不推荐使用 juDate 或 Calendar。如果您所做的只是及时测量瞬间,请随时使用 System.currentTimeMillis() - 但如果您需要以人类形式打印(例如:“2020 年 7 月 20 日 16:34,这发生了”),改为java.time改为。如果您愿意,请随意放弃 currentTimeMillis 并j.t.Instant用于这些目的 - 您的偏好。

于 2020-07-23T19:25:04.563 回答