Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以毫秒为单位计算日变化_Java_Android - Fatal编程技术网

Java 以毫秒为单位计算日变化

Java 以毫秒为单位计算日变化,java,android,Java,Android,这两行计算自1970年以来的天数。当我将手机时间设置为23:55时,这两条线路应该返回不同的值,因为23:55+10分钟是新的一天。但不知何故,两行返回相同的值 Log.d("Main", "today " + (int) (System.currentTimeMillis() / TimeUnit.DAYS.toMillis(1) ) ); Log.d("Main", "tomorrow " + (int) ((System.currentTimeMillis() + TimeUnit.MIN

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

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) ) );
日志消息:

12-09  17109-17109/com.example..myapplication D/Main: 
today 17874        // 23:55
tomorrow 17874     // 00:05 this line should be 17875, because it's a new day

使用joda time:joda time:2.9.9库此库使用和播放此库非常简单

使用joda time:joda time:2.9.9库此库使用和播放此库非常简单

这两行应该返回不同的值


如果不对它们应用整数除法,它们就会出现

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


是的,但自1970年以来,只多了10分钟

检查允许比整数除法更精确除法的代码:

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
today 17872
tomorrow 17873
您的代码截断了十进制数字,您认为这两行返回相同的结果

当然,如果不添加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.55873355324
tomorrow 17872.565677997685
today 17872
tomorrow 17873
这两行应该返回不同的值


如果不对它们应用整数除法,它们就会出现

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


是的,但自1970年以来,只多了10分钟

检查允许比整数除法更精确除法的代码:

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
today 17872
tomorrow 17873
您的代码截断了十进制数字,您认为这两行返回相同的结果

当然,如果不添加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.55873355324
tomorrow 17872.565677997685
today 17872
tomorrow 17873

正确使用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

正确使用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

使用joda time:joda time:2.9.9库为此,使用和播放此库非常简单什么时区?你是说UTC 1970年初吗?在纽约、伦敦、巴黎或慕尼黑,你是指23:55?你是将“天”定义为24小时,还是将“天”定义为日历上的日期?日历上的日期使用joda时间:joda时间:2.9.9图书馆使用和玩这个图书馆非常简单什么时区?你是说UTC 1970年初吗?你是指纽约、伦敦、巴黎还是慕尼黑的23:55?你是将“天”定义为24小时的一部分,还是指日历上的日期?日历上的日期我认为Java日期/时间不适用于api19@JanMeyer起初,我在回答中写到了这一点,但从“最近”起就删除了android版本是Java8,既然你没有提到这个版本,我希望你使用的是最新的版本。但这确实是一个需要解决的问题,包括ThreeTen BackPort(从未在Android上尝试过…),我认为Java日期/时间不适用于api19@JanMeyer起初,我在回答中写到了这一点,但从“最近”起就删除了android版本是Java8,既然你没有提到这个版本,我希望你使用的是最新的版本。但这确实是一个应该解决的问题,包括Three Ten BackPort(从未在Android上尝试过…)仅供参考,该项目现在正在进行,建议迁移到类。请参阅。在项目中,java.time的大部分功能都被向后移植到Java6和Java7。进一步适用于早期Android(仅供参考,该项目目前正在进行中,建议迁移到类中。请参阅。大多数java.time功能在项目中被移植到java 6和java 7。进一步适用于早期Android(