如何找到日期之间的差异

时间:2017-02-16 07:53:09

标签: java android date

我有两个日期的字符串格式" 2017年2月16日"," 2017年2月26日" 我用了

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");

但是我无法得到像" 10"。

这样的确切结果

4 个答案:

答案 0 :(得分:2)

希望这会对你有帮助。在myDate和time_ago中传递你的日期。

int totalMin;

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.ENGLISH);

Date systemDate = Calendar.getInstance().getTime();
                        String myDate = sdf.format(systemDate);


Date Date1 = null;
try {
    Date1 = sdf.parse(myDate);

} catch (ParseException e) {
    e.printStackTrace();
}
Date Date2 = null;
try {
    Date2 = sdf.parse(time_ago);

} catch (ParseException e) {
    e.printStackTrace();
}

assert Date2 != null;
assert Date1 != null;
long millse = Date1.getTime() - Date2.getTime();


long mills = Math.abs(millse);

Hours = (int) (mills / (1000 * 60 * 60));
Mins = (int) (mills / (1000 * 60)) % 60;
Secs = (int) (mills / 1000) % 60;

long diffDays = millse / (24 * 60 * 60 * 1000);

if (Secs >= 60) {
    Mins = Mins + 1;
    Secs = Secs - 60;
} else if (Mins >= 60) {
    Hours = Hours + 1;
    Mins = Mins - 60;
}

totalMin = (int) ((Mins) + (Secs / 60));
String t_time;

if (diffDays > 0) {
    if (diffDays == 1) {
        t_time = diffDays + " day";
    } else {
        t_time = diffDays + " days";
    }

} else if (Hours > 0) {
    if (Hours == 1) {
        t_time = Hours + " hour";
    } else {
        t_time = Hours + " hours";
    }

} else if (Mins > 0) {
    if (Mins == 1) {
        t_time = totalMin + " minute";
    } else {
        t_time = totalMin + " minutes";
    }

} else {
    if (Secs == 1) {
        t_time = Secs + " second";
    } else {
        t_time = Secs + " seconds";
    }

}

答案 1 :(得分:1)

DateTimeFormatter formatter =  DateTimeFormatter.ofPattern("dd-MMM-yyyy");
java.time.LocalDate d1 = java.time.LocalDate.parse("16-Feb-2017", formatter);
java.time.LocalDate d2 = java.time.LocalDate.parse("26-Feb-2017", formatter);

Period until = d1.until(d2);
System.out.println("Dif: " + until.getDays());

答案 2 :(得分:0)

请使用以下代码初始化SimpleDateFormat。

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);

答案 3 :(得分:0)

正如我在评论中所说,如果可以,请使用Java 8 java.time类。 kamehl23’s answer告诉你如何。这是一个既优雅又强大的解决方案,也适用于夏季时间(DST)的变化。

编辑:坚持使用较旧的Java版本,他们说你可以使用ThreeTenABP或Joda时间,我还没有尝试过任何一个。我读过,ThreeTenABP是一个Android java.time向Java 6和7的后端调整,所以我很想尝试一下。

当然可以通过Java 1.1 Calendar完成。夏季时间变化的解决方案是:

    String formattedDate1 = "16-Feb-2017";
    String formattedDate2 = "26-Feb-2017";

    DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", YOUR_LOCALE);

    Date d1 = df.parse(formattedDate1);
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(d1);

    Date d2 = df.parse(formattedDate2);
    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(d2);

    int daysBetween = 0;
    while (cal1.before(cal2)) {
        daysBetween++;
        cal1.add(Calendar.DATE, 1);
    }
    System.out.println(daysBetween);

这会打印10。它既不优雅也不高效,但只要'from'日期在'到'日期之前(或相同)(可以很容易地检查),它就可以稳健地工作。