首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java jsr310:日期和时间的差异

Java jsr310:日期和时间的差异
EN

Stack Overflow用户
提问于 2012-06-25 10:31:50
回答 2查看 3.3K关注 0票数 2

在Java中,有大量这样的问题处理计算两个日期或两次之间的差异。许多答案都指出了核心Java类的问题,并建议使用Jodatime,但是AFAIK,没有人建议如何使用jsr310来做到这一点。

那么,在jsr310中是否有任何方法来计算两个日期或两次之间的差异?

以下问题可供参考:

在核心Java中:

在Jodatime:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-25 10:31:51

如何做到这一点取决于所使用的日期或日期时间类。

如果您是实时操作(例如,带有时区等,以便将日期时间精确地指向时间线上的确切Instant ),则可以使用Duration类(javadoc)。

代码语言:javascript
复制
Duration diff = Duration.between(InstantProvider startInc, InstantProvider endInc);

在其中InstantProvider能够

或者,如果您在假设的时间内操作(例如,没有时区等),您可以使用Period类(javadoc)来获得LocalDate的两个实例之间的区别。

代码语言:javascript
复制
// diff in days, months and years:
Period diff = Period.between(LocalDate start, LocalDate end);

// diff in days:
Period diff = Period.daysBetween(LocalDate start, LocalDate end);

但是,我不知道有任何方便的方法来获得两个LocalDateTimes或LocalTimes之间的区别。但是..。可以使用以下时间来完成这一任务:

代码语言:javascript
复制
// diff between LocalDateTimes:
public static Period between(LocalDateTime start, LocalDateTime end){
  return Period.of(
    end.getYear()-start.getYear(), 
    end.getMonthOfYear().getValue()-start.getMonthOfYear().getValue(), 
    end.getDayOfMonth()-start.getDayOfMonth(),
    end.getHourOfDay()-start.getHourOfDay(),
    end.getMinuteOfHour()-start.getMinuteOfHour(),
    end.getSecondOfMinute()-start.getSecondOfMinute(),
    end.getNanoOfSecond()-start.getNanoOfSecond()
  );
}

// diff between LocalTimes:
public static Period between(LocalTime start, LocalTime end){
  return Period.of(0, 0, 0,
    end.getHourOfDay()-start.getHourOfDay(),
    end.getMinuteOfHour()-start.getMinuteOfHour(),
    end.getSecondOfMinute()-start.getSecondOfMinute(),
    end.getNanoOfSecond()-start.getNanoOfSecond()
  );
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-09 14:35:49

回答wrt到最后的JDK1.8版本。

有两个量程类- DurationPeriod。持续时间是基于时间的(nanos),期间是基于日期的(年/月/日)。

同一类型的两个时态对象之间的时间量可以通过两种方法中的一种很容易地计算出来(我更喜欢第一种):

代码语言:javascript
复制
long days = ChronoUnit.DAYS.between(start, end);
long days = start.until(end, ChronoUnit.DAYS);

相同类型的两个时态对象之间的Duration可以按以下方式计算:

代码语言:javascript
复制
Duration d = Duration.between(start, end);

两个Period对象之间的LocalDate可以按以下方式计算:

代码语言:javascript
复制
Period p = Period.between(start, end);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11187639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档