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



我在CIS 163班上做一个项目,这个项目实际上是一个露营地预订系统。大部分代码都提供了,我只需要添加某些功能。目前,我需要能够确定两个不同的GregorianCalendar实例(一个是当前日期,另一个是预定的"签出"(之间用天数表示的时间。我一直想不出该怎么做,希望这里有人能帮我。

GregorianCalendar很旧了,你真的不应该再使用它了。它很麻烦,从Java8开始就被"新的"java.time模块所取代。

尽管如此,如果您需要使用GC实例进行比较,您可以很容易地使用日期之间的毫秒来计算时间,如下所示:

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

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

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

如果你需要在类型之间转换(例如,你使用的是遗留代码(,你可以这样做:

LocalDate date3 = gcDate1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate date4 = gcDate2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

我也很确定这个问题一定被问了一遍又一遍,所以在问之前一定要仔细搜索。

由于您被迫使用旧的、设计糟糕的GregorianCalendar类,因此您应该做的第一件事是将两个GregorianCalendar对象中的每一个转换为现代类型。由于Java 8GregorianCalendar有一个将其转换为CCD_。查看文档,我在下面包含一个链接。

现在您已经有了两个ZonedDateTime对象,根据您的确切需求,有不同的路径。通常,人们会使用Duration.between()来计算持续时间,即它们之间的时间量,单位为小时、分钟、秒和几分之一秒。如果您知道您总是只需要其中一个时间单位,那么您可以使用例如ChronoUnit.HOURS.between()ChronoUnit.MILLISECONDS.between()。如果需要计算天数,请使用ChronoUnit.DAYS.between()

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

链接

  • 文档:
    • GregorianCalendar(早已过时,除非迫不得已,否则不要使用(
    • Duration
    • ChronoUnit
    • Period
  • Oracle教程:日期-时间,说明如何使用java.Time,这是ZonedDateTImeDurationChronoUnitPeriod所属的现代java日期和时间API

相关内容

  • 没有找到相关文章

最新更新