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.Instant
和 j.t.ZonedDateTime
,你几乎可以表达任何与日期相关的东西。
我想说的是,强烈不建议使用 j.u.Date 或日历。如果你所做的只是及时测量瞬间,请随意坚持使用 System.currentTimeMillis() - 但如果你需要以人类形式打印它(例如:“在 2020-07-20 16:34,这件事发生了”),改用 java.time
。如果您愿意,请随意放弃 currentTimeMillis 并使用 j.t.Instant
代替 - 您的偏好。
我一直在构建一个应用程序并保存重要的时间信息,我一直在使用 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.Instant
和j.t.ZonedDateTime
,你几乎可以表达任何与日期相关的东西。
我想说的是,强烈不建议使用 j.u.Date 或日历。如果你所做的只是及时测量瞬间,请随意坚持使用 System.currentTimeMillis() - 但如果你需要以人类形式打印它(例如:“在 2020-07-20 16:34,这件事发生了”),改用 java.time
。如果您愿意,请随意放弃 currentTimeMillis 并使用 j.t.Instant
代替 - 您的偏好。