计算两个JDateChooser值之间的差异

时间:2015-04-17 01:37:55

标签: java netbeans jdatechooser

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

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

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

2 个答案:

答案 0 :(得分:4)

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

Java 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();

您可以查看此answer,了解如何格式化值

答案 1 :(得分: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小时)。 - MadProgrammer

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