Ahm*_*mad 3 java time timestamp timeunit
我试图在几天内得到两个时间戳的差,并且TimeUnit为我返回完全错误的结果。
这是我的代码:
long ts = 1522242239952L;
long now = 1527274162820L;
long difference = now - ts;
int ageInDays = (int) TimeUnit.MILLISECONDS.convert(difference, TimeUnit.DAYS);
int ageInDays2 = (int) (difference/(1000 * 60 * 60 * 24));
System.out.println(ageInDays);
System.out.println(ageInDays2);
Run Code Online (Sandbox Code Playgroud)
输出为:
-1756844032
58
Run Code Online (Sandbox Code Playgroud)
为什么TimeUnit计算如此不正确?
因为您使用的是TimeUnit.convert向后转换。尝试
TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
要不就
TimeUnit.MILLISECONDS.toDays(difference);
Run Code Online (Sandbox Code Playgroud)
参考:https : //docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html#convert( long,% 20java.util.concurrent.TimeUnit)
您误解了 TimeUnit 文档:
长转换(长源持续时间,时间单位源单位)
将给定单位的给定持续时间转换为该单位。
您的源单位是毫秒,并且您需要天数,因此该行应为
int ageInDays = (int) TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3293 次 |
| 最近记录: |