首页 文章

Java中DateTime对象之间的小数天数

提问于
浏览
3

如何在两个Joda-Time DateTime实例之间找到天数的小数差异?

Days.daysBetween(开始,结束).getDays()给我一个像10/15等的数字 . 我需要得到的是精确值,如10.15或15.78

3 回答

  • 0

    如果你使用Hours.hoursBetween,你可能会因为四舍五入而错过几分钟 .

    试试这个:(end.getMillis - start.getMillis())/(1000 * 3600 * 24)

  • 1

    以毫克为单位减去时间并除以每天的毫秒数:

    double diff = (end.getMillis() - start.getMillis()) / 86400000d;
    

    测试

    DateTime start = new DateTime(2015, 1, 1,  0,  0,  0,   0); // Jan 1, 2015
    DateTime end   = new DateTime(2015, 7, 4, 14, 23, 55, 876); // Jul 4, 2015 at 2:23:55.876 PM
    
    final int MILLIS_PER_DAY = 24 * 60 * 60 * 1000; // 86_400_000
    double diff = (double)(end.getMillis() - start.getMillis()) / MILLIS_PER_DAY;
    System.out.println(diff);
    
    int days = (int)diff;
    diff = (diff - days) * 24;
    int hours = (int)diff;
    diff = (diff - hours) * 60;
    int minutes = (int)diff;
    diff = (diff - minutes) * 60;
    int seconds = (int)diff;
    diff = (diff - seconds) * 1000;
    int millis = (int)Math.round(diff);
    System.out.println(days    + " days, "    +
                       hours   + " hours, "   +
                       minutes + " minutes, " +
                       seconds + " seconds, " +
                       millis  + " millis");
    

    产量

    184.55828560185185
    184 days, 13 hours, 23 minutes, 55 seconds, 876 millis
    

    请注意,由于夏令时,它只有13个小时,而不是14个小时 .

  • 0

    感谢评论的输入,我使用它精确地工作到秒:

    double days = Seconds.secondsBetween(start, end).getSeconds()/86400;
    

相关问题