这两行计算自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) ) );
答案 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库,因为它非常易于使用和播放该库