在Java中如何计算两个日期之间的年月日差异?

6
假设我有一个Employee模型,它的属性变量是startDate,而Promotion模型具有promotionDate。我想找出员工晋升之前已经工作了多长时间,为此我需要找到promotionDate和startDate之间的差异。如果我得到startDate为employee.getStartDate(),promotionDate为promotion.getPromotionDate(),那么如何计算任意日期之间的年、月和日的差异?
任何帮助都将不胜感激。
更新:我用以下方法解决了问题。
String startDate = "2018-01-01";
String promotionDate = "2019-11-08";

LocalDate sdate = LocalDate.parse(startDate);
LocalDate pdate = LocalDate.parse(promotionDate);

LocalDate ssdate = LocalDate.of(sdate.getYear(), sdate.getMonth(), sdate.getDayOfMonth());
LocalDate ppdate = LocalDate.of(pdate.getYear(), pdate.getMonth(), pdate.getDayOfMonth());

Period period = Period.between(ssdate, ppdate);
System.out.println("Difference: " + period.getYears() + " years " 
                                  + period.getMonths() + " months "
                                  + period.getDays() + " days ");

谢谢。

你尝试过什么? - Nicholas K
这是3月4日还是4月3日?怎么会是2个月零2天呢?无论如何,你需要像这样使用 Period.between(LocalDate.of(2015, Month.JANUARY, 1), LocalDate.of(2018, Month.APRIL, 3))。该示例返回一个 P3Y3M2D 的时间段,表示为3年3个月2天的时间段。链接到 Period 类的文档 - Ole V.V.
我推荐这个答案这个(两者在实质上相似)。 - Ole V.V.
1
欢迎来到 Stack Overflow。在发布问题之前,彻底搜索并搜索是一个好主意。通常这样做会更快地找到一个好的答案。 - Ole V.V.
@NicholasK 是的,我已经按照提供的答案尝试过了,成功解决了我的问题。 - rizius
@OleV.V. 是的,你说得对。下次我会记住的。谢谢。 - rizius
1个回答

7

使用java8中的LocalDate.of(int year, int month, int dayOfMonth),你可以创建两个日期并计算它们之间的差值:

LocalDate firstDate = LocalDate.of(2015, 1, 1);
LocalDate secondDate = LocalDate.of(2018, 3, 4);

Period period = Period.between(firstDate, secondDate);

Period类有.getYears().getMonths()等方法。

如果您手头持有的是java.util.Date对象,而非像2015, 1, 1这样的int数值,您可以先将其转换为LocalDate

LocalDate startLocalDate = startDate.toInstant()
        .atZone(ZoneId.systemDefault())
        .toLocalDate();

之前我以一种泛化的方式提出了问题,但现在我已经根据我的实际问题更新了这个问题。在你的回答中:LocalDate.of(2015, 1, 1)。而不是提供2015、1、1作为实际值,我该如何找到它们之间的差异? - rizius
@rizius 更新了答案。 - Ruslan
谢谢更新。但是,如果我的startDate是String类型,我能将其转换为LocalDate吗? - rizius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接