计算日变化(以毫秒为单位)

时间:2018-12-07 13:14:47

标签: java android

这两行计算自1970年以来的天数。当我将手机的时间设置为23:55时,这两行应返回不同的值,因为23:55 + 10分钟是新的一天。但是无论如何,这两行都返回相同的值。

data: { Id: id, Status: status,Checkin: checkin, Checkout: checkout, Cost: cost, Terms: check1, Info: check2, values: favorite },

日志消息:

Log.d("Main", "today " + (int) (System.currentTimeMillis() / TimeUnit.DAYS.toMillis(1) ) );
Log.d("Main", "tomorrow " + (int) ((System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10)) / TimeUnit.DAYS.toMillis(1) ) );

3 个答案:

答案 0 :(得分:1)

  

这两行应该返回不同的值


如果您不将其应用于整数除法,则将使用它们。

  

因为23:55 + 10分钟是新的一天


是的,但是自1970年以来仅十分钟。

检查此代码,该代码可实现比整数除法更精确的除法:

System.out.println("today " +
        (System.currentTimeMillis() * 1.0 / TimeUnit.DAYS.toMillis(1)));
System.out.println("tomorrow " +
        ((System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10)) * 1.0 / TimeUnit.DAYS.toMillis(1)));

将打印:

today 17872.55873355324
tomorrow 17872.565677997685

您的代码将截断十进制数字,并且您认为这两行返回相同的结果。

当然,如果您不添加10分钟,而是添加1天,那么代码中的结果将是正确的:

System.out.println("today " +
        (int) (System.currentTimeMillis() / TimeUnit.DAYS.toMillis(1)));
System.out.println("tomorrow " +
        (int) ((System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)) / TimeUnit.DAYS.toMillis(1)));

将打印:

today 17872
tomorrow 17873

答案 1 :(得分:1)

正确使用Java日期/时间API,我会争取

public long getDaysFromEpoch(Instant moment){
    return ChronoUnit.DAYS.between(
             Instant.EPOCH, 
             moment
         );
}

使用瞬间,您可以获得毫秒级的瞬间:

System.out.println(getDaysFromEpoch(Instant.now()));     //17872
System.out.println(getDaysFromEpoch(Instant.now().plus(1, ChronoUnit.DAYS))); //17873
System.out.println(getDaysFromEpoch(Instant.ofEpochMilli(100_000_000_000L))); //1157

答案 2 :(得分:0)

使用joda-time:joda-time:2.9.9库,因为它非常易于使用和播放该库