从毫秒到天的TimeUnit转换对我不起作用

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计算如此不正确?

Dav*_*idW 5

因为您使用的是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)


Sta*_*r00 4

您误解了 TimeUnit 文档:

长转换(长源持续时间,时间单位源单位)

将给定单位的给定持续时间转换为该单位。

您的源单位是毫秒,并且您需要天数,因此该行应为

int ageInDays = (int) TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)