java - 天真地用 Clock.systemDefaultZone().millis() 替换 System.currentTimeMillis() 是否安全?

标签 java datetime java-time

Java 8 引入了 java.time.Clock接口(interface),它应该允许我有效地模拟系统时间调用(太棒了!)。

我想天真地用对 someClock.millis() 的调用替换对 System.currentTimeMillis() 的调用,但我不清楚这些根据 Clock.system* 文档中给出的 caviet,两个时钟实际上将在所有情况下返回相同的值,该文档声明它们使用“...最佳可用系统时钟”。 System.currentTimeMillis() 没有指定任何关于使用最佳可用时钟的类似声明。

最佳答案

嗯,不,你不能保证它会完全一样,因为

The system factory methods provide clocks based on the best available system clock. This may use System.currentTimeMillis(), or a higher resolution clock if one is available

所以它明确声明它可能使用更好的时钟,这意味着它绝对可能不同。

即使您分析了所有现有的实现并发现它们都在使用 System.currentTimeMillis(),您也无法明确保证事情会保持这种状态,因此依赖它是无效的。

这是否足够接近您的目的取决于您的应用程序和个人偏好。

关于java - 天真地用 Clock.systemDefaultZone().millis() 替换 System.currentTimeMillis() 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268491/

相关文章:

java - 如何解决找不到符号错误?

java - 可观察模式实现不调用更新方法

sql server group by datetime 截止点 10 :00am

java - DateTimeFormatter 相当于 String.format ("%tT",值)

java - 将 Instant 从大纪元时间转换为微秒

java - 本地化 java.time 中 `MonthDay` 或 `YearMonth` 类中的字符串?

java - freemarker viewpage 可以 'user' 编辑和保护吗?

java - Guava Spliter 返回一个 Collection,但我想要一个 HashMap

c# - 从 Kinect 传感器数据计算 BPM

linux - 有没有办法在特定时间在linux中找到修改过的文件