我怎样才能获得包括时间在内的两个日期之间的天数?

时间:2018-04-12 17:34:51

标签: java android

我如何获得两个日期之间的天数,包括时间。例如,今天晚上8点到其他日子晚上8点之间的天数?我正在使用它,但根据一个月的日子给出

public static int getDaysTillOmer(Date d1, Date d2) {
    int daysdiff = 0;
    long diff = d2.getTime() - d1.getTime();
    long diffDays = diff / (24 * 60 * 60 * 1000);
    daysdiff = (int) diffDays;

    return daysdiff;
}

4 个答案:

答案 0 :(得分:2)

使用TimeUnit

public static int getDaysTillOmer(Date d1, Date d2) {
    long diff = d2.getTime() - d1.getTime();
    return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);

答案 1 :(得分:2)

您的计算(以及其中一个答案中的实施)仅适用于在不知道夏令时的时区中运行的系统。对于例如德国时区(我所居住的地方),2018-03-24 03:00:002018-03-25 03:00:00的持续时间我认为你希望有一天这个特殊日子只有23个小时的唯一问题。

如果你想坚持JVM提供的标准类,你可以使用日历并日复一日地添加它,直到基础日期在第二个日期之后。这是一个例子(没有健全性检查,例如第一个日期实际上是在第二个日期之前;在另一个案例中你将遇到无限循环)。该示例设置了显式使用的时区,因此它应该在您的系统上显示相同的结果:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class CalcDuration {

    public final static void main(String[] args) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
        Date d1 = sdf.parse("2018-03-24 03:00:00");
        Date d2 = sdf.parse("2018-03-25 03:00:00");

        System.out.println("duration1: " + getDuration(d1, d2));
    }

    private static int getDuration(Date d1, Date d2) {
        Calendar c = Calendar.getInstance();
        c.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
        c.setTime(d1);
        int days = 0;
        while (true) {
            c.add(Calendar.DAY_OF_YEAR, 1);
            if (c.getTime().after(d2)) {
                return days;
            }
            days++;
        }
    }
}

答案 2 :(得分:1)

使用Joda Time执行此操作。

public void calcDays(Date start,Date end) {

        Duration d = new Duration(start.getTime(), end.getTime());


        System.out.println("Number of days from dates "+d.getStandardDays());
}

Duration是来自JodaTime的课程

答案 3 :(得分:1)

假设您正在使用java.util.Date,那么您的算法非常好。我会稍微清理一下。

import java.util.Date;

public static int getDaysTillOmer(Date d1, Date d2) {
    long diffDays = (d2.getTime() - d1.getTime()) / (24L * 60 * 60 * 1000);
    return (int) diffDays;
}

此逻辑将天数截断为整数值。这是 2天,23小时和59分钟的时差将转换为: 2天

另请注意,值24已转换为24L,以防止促销延长。

相关问题