1

我正在用 Java 处理日期。我正在找出两个日期之间的差异。

public static void main(String[] args) {
    final Date futDate = new GregorianCalendar(2012, 8, 15, 0, 0, 0).getTime();

    final Date currentDate = new GregorianCalendar().getTime();

    long diff = Math.round((futDate.getTime() - currentDate.getTime()) / 1000);

    System.out.println(diff / 86400 + " days");
    System.out.println((diff % 86400) / 3600 + " hrs");
    System.out.println(((diff % 86400) % 3600) / 60 + " mins");
    System.out.println((((diff % 86400) % 3600) % 60) % 60 + " secs");
}

输出:

31 days
8 hrs
37 mins
30 secs

即使日期差不到一天,输出也超过 31 天。

4

5 回答 5

8

8 不是当前月份数:)

月份从 0 开始编号

Java 的日期很痛苦,所以我建议看看http://joda-time.sourceforge.net/

于 2012-08-14T09:57:04.150 回答
5

更好的是,使用内置常量:

Calendar.AUGUST 
于 2012-08-14T09:58:15.953 回答
3

我正在用 Java 处理日期。

使用Joda Time更好

我正在找出两个日期之间的差异。

Joda Time 让这变得非常简单:

LocalDateTime start = ...;
LocalDateTime end = ...;
Period period = new Period(start, end, PeriodType.dayTime());

System.out.println(period.getDays() + " days");
System.out.println(period.getHours() + " hrs");
System.out.println(period.getMinutes() + " mins");
System.out.println(period.getSeconds() + " secs");
于 2012-08-14T10:01:07.843 回答
0

月份为 0,如API中所述

因此,您可能希望将其设置为 7 而不是 8。

对于持续时间计算,还有Joda Time是一个 IMO 非常复杂的时间 API。

于 2012-08-14T10:02:53.037 回答
0
于 2017-02-18T21:20:56.633 回答