使用GregorianCalendar实例确定经过的时间?

时间:2020-03-22 16:20:28

标签: java compare gregorian-calendar

我正在研究CIS 163班的一个项目,该项目实际上是露营地预订系统。提供了大部分代码,我只需要向其中添加某些功能。目前,我需要确定以天数表示的两个不同的GregorianCalendar实例之间的时间间隔(一个是当前日期,另一个是预定的“签出”)。我还没有弄清楚如何做到这一点,并希望这里有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

GregorianCalendar很旧,您不应该再使用它了。自Java 8起,它很麻烦,并被“新的” java.time模块取代。

仍然,如果需要使用GC实例进行比较,则可以轻松地使用日期之间的毫秒数来计算时间,例如:

constructor(props) { 
    super(props);
}

如果您想使用新的Time API,以下代码将起作用。

GregorianCalendar date1 = new GregorianCalendar();
GregorianCalendar date2 = new GregorianCalendar();

// Adding 15 days after the first date
date2.add(GregorianCalendar.DAY_OF_MONTH, 15);
long duration = (date2.getTimeInMillis() - date1.getTimeInMillis() )
                         / ( 1000 * 60 * 60 * 24) ;
System.out.println(duration);

如果您需要在类型之间进行转换(例如,您正在使用旧版代码),则可以这样操作:

LocalDate date1 = LocalDate.now();
LocalDate date2 = date1.plusDays(15);

Period period = Period.between(date1, date2);
int diff = period.getDays();
System.out.println(diff);

我也很确定一定要一遍又一遍地问这个问题,因此请确保在询问之前进行正确的搜索。

答案 1 :(得分:0)

由于您被迫使用设计较旧的GregorianCalendar类,因此,您应该做的第一件事就是将两个GregorianCalendar对象中的每一个都转换为现代类型。由于Java 8 GregorianCalendar具有将其转换为ZonedDateTime的方法。查看文档,我在下面提供了一个链接。

现在您有了两个ZonedDateTime对象,根据您的确切要求有不同的路径。通常,人们会使用Duration.between()来找到持续时间,以及它们之间的时间量,以小时,分钟,秒和秒的分数表示。如果您知道始终只需要这些时间单位之一,则可以改用ChronoUnit.HOURS.between()ChronoUnit.MILLISECONDS.between()。如果需要计算天数,请使用ChronoUnit.DAYS.between()

相反,如果您需要以月和天为单位的时间,则应改用Period.between()

因为这是家庭作业,所以如果我给你代码,那将是不公平的(我会在许多其他情况下这样做)。编码愉快。

链接

相关问题