1

这是我的代码,但这不起作用。

    Start.getDate();
    End.getDate();
    int diffInDays = (int)( (Start.getDate() - End.getDate()) / (1000 * 60 * 60 * 24));
    System.out.println(diffInDays);

那么如何制作一个用户可以查看 2 个 JDateChooser 之间差异的程序。

4

2 回答 2

5

日期/时间计算是一个复杂的主题,通常最好使用专用库来解决。

爪哇 8

Instant start = Start.getDate().toInstance();
Instant end = End.getDate().getInstance();

Duration duration = Duration.between(start, end);

乔达时间

如果你不能使用 Java 8,那么你应该使用Joda -Time

DateTime start = new DateTime(Start.geDate().getTime());
DateTime end = new DateTime(End.geDate().getTime());

// You might need to use end, start instead, depending on which
// is later
Duration duration = new Duration(start, end);
Period period = duration.toPeriod();

您可以查看此答案以了解如何格式化该值

于 2015-04-17T02:18:56.993 回答
2

尝试以毫秒为单位获取时间并进行比较:

Date startDate = Start.getDate();
Date endDate = End.getDate();

// In milliseconds
long difference = endDate.getTime() - startDate.getTime();

int diffInDays = (int)(difference / 1000 / 60 / 60 / 24);

在减去Date不是数字的对象之前。你想比较他们的时间,这是数字。

要检查是否JDateChooser为空,只需执行以下操作:

if (Start == null) {
    // code
}

或者

if (Start != null) {
    // code
}

免责声明:

你不应该从彼此减去两毫秒,只是有很多规则没有考虑到(闰年,闰秒,世纪边界,夏令时),以使其更加精确。您应该使用 Java 8 的 Time API 或 JodaTi e(哦,日子并不总是 24 小时)。-疯狂程序员

这是一个快速而肮脏的解决方案,但有很多弱边缘情况。请小心。

于 2015-04-17T01:43:28.240 回答