我想计算两个时间戳之间有多少天的差异,但我不想考虑时间差异。
例如 :
long time1 = 1546258765000 (Mon 31 December 2018 13:19:25)
long time2 = 1546005915367 (Fri 28 December 2018 15:05:15)
Run Code Online (Sandbox Code Playgroud)
结果应该是 3, 3 天就过期了...由于时间原因,我从这个方法中得到了 2 天:
TimeUnit.DAYS.convert(time1 - time2 , TimeUnit.MILLISECONDS))
Run Code Online (Sandbox Code Playgroud)
我只需要为 time1 和 time2 设置相同的时间,然后返回时间戳并像这样计算......但我不确定最好的方法是什么。
注意: 正如 Ole VV 所指出的:这仅适用于 UTC。由于时间戳始终采用 UTC,因此如果您位于另一个时区,则可能会返回不需要的结果。例子:
在格林尼治标准时间 + 1 时:
time1 = 1546216200000L (Mon 31 December 2018 01:30:00) (31/12 00:30 on UTC)
time2 = 1545953400000L (Fri 28 December 2018 00:30:00) (27/12 11:30 on UTC)
Run Code Online (Sandbox Code Playgroud)
这将导致 4 天的差异,因为这是 UTC 的差异。
为了弥补这一点,您应该抵消差异,以便时间戳显示您的当前时间,而不是 UTC 时间。(例如,如果您采用 GMT+1,则需要为每个时间戳添加 1 小时(3600000 毫秒))。
我相信最简单的方法可能是使用模块:
final long MILLIS_PER_DAY = 1000*60*60*24;
long time1 = 1546258765000L; // (Mon 31 December 2018 13:19:25)
long time2 = 1546005915367L; // (Fri 28 December 2018 15:05:15)
// Set both times to 0:00:00
time1 -= time1 % MILLIS_PER_DAY;
time2 -= time2 % MILLIS_PER_DAY;
Run Code Online (Sandbox Code Playgroud)
进而
TimeUnit.DAYS.convert(time1 - time2 , TimeUnit.MILLISECONDS))
Run Code Online (Sandbox Code Playgroud)
应该给你想要的结果。
| 归档时间: |
|
| 查看次数: |
5480 次 |
| 最近记录: |