Java 使用GregorianCalendar实例来确定经过的时间?
我在我的CIS 163班上做一个项目,这个项目实际上是一个露营地预订系统。大部分代码都已经提供了,我只需要向其中添加一些功能。目前,我需要能够确定两个不同的GregoriaCalendar实例(一个是当前日期,另一个是预定的“签出”)之间经过了多少时间,以天表示。我还不知道该怎么做,希望这里的人能帮我解决。格雷戈里安日历已经很旧了,你不应该再使用它了。它很麻烦,从Java8开始就被“新的”java.time模块所取代 尽管如此,如果需要使用GC实例进行比较,可以使用日期之间的毫秒数轻松计算时间,如下所示:Java 使用GregorianCalendar实例来确定经过的时间?,java,compare,gregorian-calendar,Java,Compare,Gregorian Calendar,我在我的CIS 163班上做一个项目,这个项目实际上是一个露营地预订系统。大部分代码都已经提供了,我只需要向其中添加一些功能。目前,我需要能够确定两个不同的GregoriaCalendar实例(一个是当前日期,另一个是预定的“签出”)之间经过了多少时间,以天表示。我还不知道该怎么做,希望这里的人能帮我解决。格雷戈里安日历已经很旧了,你不应该再使用它了。它很麻烦,从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);
LocalDate date3 = gcDate1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate date4 = gcDate2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
如果您想使用新的时间API,下面的代码可以工作
LocalDate date1 = LocalDate.now();
LocalDate date2 = date1.plusDays(15);
Period period = Period.between(date1, date2);
int diff = period.getDays();
System.out.println(diff);
如果需要在类型之间进行转换(例如,您使用的是旧代码),您可以这样做:
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 date3 = gcDate1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate date4 = gcDate2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
另外,我很确定这个问题一定被反复问过,所以在问之前一定要确保搜索正确。由于您被迫使用了设计拙劣的旧
GregorianCalendar
类,所以首先要做的是将这两个GregorianCalendar
对象分别转换为现代类型。因为Java8GregorianCalendar
有一个方法可以将其转换为ZoneDateTime
。查看文档,我在下面添加了一个链接
现在您已经有了两个ZoneDateTime
对象,根据您的具体需求有不同的路径。人们通常会使用Duration.between()
来查找持续时间,以小时、分钟、秒和秒的分数为单位。如果您知道始终只需要这些时间单位中的一个,则可以使用例如chronuit.HOURS.between()
或chronuit.millises.between()
。如果需要计算天数,请使用ChronoUnit.days.between()
如果需要以月和日为单位的时间,则应使用Period.between()
因为这是家庭作业,如果我给你代码(在很多其他情况下我都会这么做),那将是不公平的。快乐编码
链接
- 文件:
- (长期过时,除非被迫使用,否则请勿使用)
- 解释如何使用java.time,这是现代java日期和时间API,属于
、ZoneDateTime
、Duration
和ChronoUnit
Period
gregoriacalendar
?那是个丑闻。那门课设计得很糟糕,而且早已过时。任何人都不应该使用它。已经过去了多少时间-以月、日、小时、毫秒或以上所有形式?