当前位置: 首页 > 面试题库 >

Java 8计算两个日期之间的月份

杭泉
2023-03-14
问题内容

我有两个约会:

  • 开始日期: "2016-08-31"
  • 结束日期: "2016-11-30"

在上述两个日期之间的91天持续时间,我希望我的代码返回3个月的持续时间,但以下方法仅返回2个月。有谁有更好的建议?还是你们认为这是Java
8中的错误?工期为91天,仅返回2个月。

非常感谢你的帮助。

方法1:

Period diff = Period.between(LocalDate.parse("2016-08-31"),
    LocalDate.parse("2016-11-30"));

方法2:

long daysBetween = ChronoUnit.MONTHS.between(LocalDate.parse("2016-08-31"),
    LocalDate.parse("2016-11-30"));

方法3:

我尝试使用Joda库而不是Java 8
API,它可以工作。它会返回3,它看起来像Java持续时间月份的计算也使用了天的值。但就我而言,我不能在项目中使用Joda。因此仍在寻找其他解决方案。

    LocalDate dateBefore= LocalDate.parse("2016-08-31");
    LocalDate dateAfter = LocalDate.parse("2016-11-30");
    int months = Months.monthsBetween(dateBefore, dateAfter).getMonths();
    System.out.println(months);

问题答案:

由于您不在乎情况如何。您只需要两个日期之间的月份数,请使​​用期间的文档来调整日期,它使用来解释日期Jacob。只需将两个实例的日期设置为相同的值(每月的第一天)

Period diff = Period.between(
            LocalDate.parse("2016-08-31").withDayOfMonth(1),
            LocalDate.parse("2016-11-30").withDayOfMonth(1));
System.out.println(diff); //P3M

与其他解决方案相同:

long monthsBetween = ChronoUnit.MONTHS.between(
        LocalDate.parse("2016-08-31").withDayOfMonth(1),
        LocalDate.parse("2016-11-30").withDayOfMonth(1));
System.out.println(monthsBetween); //3

@OlivierGrégoire 编辑评论:

不用使用a
LocalDate并将日期设置为每月的第一天,我们可以使用YearMonth不使用天数的单位。

long monthsBetween = ChronoUnit.MONTHS.between(
     YearMonth.from(LocalDate.parse("2016-08-31")), 
     YearMonth.from(LocalDate.parse("2016-11-30"))
)
System.out.println(monthsBetween); //3


 类似资料:
  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个

  • 请注意,这不是以下任何一个的复制品 计算两个Java日期实例之间的差异 用java计算两个日期之间的月份[重复] 我有两个约会: 开始日期: 它的91天持续时间之间的上述两个日期,我期望我的代码返回3个月的持续时间,但下面的方法只返回2个月。有人有更好的建议吗?还是你们认为这是8Java的窃听器?91天的期限只返回2个月。 非常感谢你的帮助。 方法1: 方法二: 方法3: 我尝试使用Joda库而不

  • 问题内容: 如果不使用PHP 5.3的date_diff函数(我使用的是PHP 5.2.17),是否有一种简单而准确的方法?我正在考虑以下代码,但是我不知道如何计算leap年: 我正在尝试计算一个人的月数。 问题答案: 您可能还希望将某天包括在内,具体取决于您是否指的是 整个 月。希望你能明白。

  • 防止日期保存时间出错 输入是两个对象(没有时间,我知道,但我需要使用实例来实现这一点)

  • 问题内容: 如何计算SQL Server中两个日期之间的工作日数? 星期一至星期五,它必须是T-SQL。 问题答案: 对于周一至周五的工作日,您可以使用单个SELECT进行操作,如下所示: 如果要包括假期,则必须进行一些调整…

  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时