在JAVA中获取日期和今天之间的月数[重复]

Posted

技术标签:

【中文标题】在JAVA中获取日期和今天之间的月数[重复]【英文标题】:Get the number of months beetween a date and today in JAVA [duplicate] 【发布时间】:2020-07-14 02:16:56 【问题描述】:

我正在尝试获取作为参数发送的字符串格式(“2019-05-31”)的给定日期与今天:2020-07-13 之间的月数。在本例中为 13 个月。

我想把答案放在一个 int 变量中。

有什么简单的方法吗?

非常感谢!

【问题讨论】:

@Niroshan 可怕的 Date 类都在几年前被现代的 java.time 类所取代,几年前采用了 JSR 310。建议在 2020 年使用它们是糟糕的建议。 这个好像没研究好?有一些类似的问题,例如Java Date month difference。 This answer by Kuchi wold 可能会有所帮助。 【参考方案1】:

从 Java 1.8 开始:

LocalDate today = LocalDate.now();
LocalDate myDate = LocalDate.parse("2019-05-31");
int months = (int) Period.between(myDate,today).toTotalMonths();
System.out.println(months); // output: 13

【讨论】:

哇,非常感谢...不知道这么简单:D 虽然结果不太可能不适合int,但我发现最好检查一下假设。使用Math.toIntExact(Period.between(myDate,today).toTotalMonths())【参考方案2】:

java.time

使用 java.time 类。

Period::toTotalMonths 方法返回一个 long,表示整个时间跨度内经过的月数。

您要求的是int,而不是long。与其将long 转换为您想要的int,不如调用Math.toIntExact。如果转换产生的缩小溢出,此方法将引发异常。

int months =
    Math.toIntExact(
        Period.between
        (
            LocalDate.parse( "2019-05-31" ) ,
            LocalDate.now( ZoneId.of( "Africa/Tunis" ) )
        )
        .toTotalMonths()
    )
;

【讨论】:

【参考方案3】:

您可以使用以下方法

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class DateUtil

    public static void main(String[] args) 

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String date = "2019-05-31";
        LocalDate localDate = LocalDate.parse(date, formatter);
        LocalDate now = LocalDate.now();

        long diff = ChronoUnit.MONTHS.between(localDate, now);

        System.out.println(diff);

    


【讨论】:

无需为标准 ISO 8601 格式定义自定义格式模式。内置。

以上是关于在JAVA中获取日期和今天之间的月数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何计算两个日期之间的月数和天数,而不在 SQL Server 中返回负值

计算SQL中两个日期之间的月数[重复]

查询两个日期相差的月数和剩下的天数

在JAVA中如何算出两段时间相差的月数 ,

c#如何计算两个日期之间相隔天数

计算每个项目组的月数