【发布时间】:2020-11-13 14:21:48
【问题描述】:
我一直在构建一个应用程序并保存重要的时间信息,我一直在使用System.currentTimeMillis() 来获取以毫秒为单位的时间戳。我所有的算法都使用这个 ms 数据,并且日期与这个 ms 数据一起保存。缓存的持续时间也被确定,对象日期的格式是从这个毫秒时间戳开始的。
我不确定这是否是一个好习惯。用Calendar.getinstace()是不是更好
我收集到 currentTimeMillis() 可能是一种不好的做法,因为它会导致时间数据不一致,但我不明白为什么会这样。
【问题讨论】:
-
或者考虑使用 UNIX 时间格式,在您必须处理国际时区的情况下也会有所帮助
-
您是否将毫秒时间转换为日期和时间?你知道更新的
java.time库吗? -
Calendar 及其子类 GregorianCalendar 在未提供显式时间戳时在
System.currentTimeMillis()的值上初始化。因此没有太多的收获。只要您只需要检查哪个事件首先发生,时间戳作为长值就可以了;当您需要做一些基于人类日历的事情时使用日历,例如日期格式或确定时间戳所在的月份 -
可能与您有时听到的值不一致的是它基于系统时钟。如果用户将设备时钟更改为 2010 年,您将获得今年的时间戳。但这在标准 JDK 中是难以避免的。如果实际资金取决于时间戳的正确性,您可以对外部时间服务器进行定期检查以确保系统时间正常
-
您的意思是inconsistent time elapsed in java?库方法的任何选择都不会使您免于使用该方法。顺便说一句,我推荐
Instant.now()用于大多数用途。
标签: java android java-calendar