我的豆子中有一个字符串日期yyyymm,想与本月或以前的日历日期进行比较

时间:2019-06-27 01:41:31

标签: java string calendar

我有一个带有mvn spring-boot:run 的Java Bean,其中包含一个String month值。

我想使用日历日期将该值与当月或上个月进行比较。我不知道该怎么做。

当前,在"YYYYMM" bean类中,我使用以下属性:

DateBean

private String month; 中,我得到了List<DateBean>的格式值,例如"YYYYMM"

我想将其与当前的日历日期进行比较,以检查月份是否为当前月份。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您会在bean的字符串中保留一个整数值吗?浮点值?当然不会。那为什么要一个月值呢?当然,您也不会这样做。您想要:

private YearMonth month;

YearMonth类是现代Java日期和时间API java.time的一部分。当程序接受日期和时间数据作为字符串时,请将其解析为适当的日期时间类型。您可能会发现有一个方便的构造函数,例如:

private static final DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("uuuuMM");

public DateBean(String month) {
    this.month = YearMonth.parse(month, monthFormatter);
}

比较仅使用equals的{​​{1}}方法,例如:

YearMonth

输出为:

    List<DateBean> dateBeans
            = List.of(new DateBean("201901"), new DateBean("201906"));
    YearMonth currentMonth = YearMonth.now(ZoneId.of("Europe/Sofia"));
    for (DateBean bean : dateBeans) {
        if (bean.getMonth().equals(currentMonth)) {
            System.out.println("" + bean.getMonth() + " is current month");
        } else {
            System.out.println("" + bean.getMonth() + " is not current month");
        }
    }

由于新月并非在所有时区都在同一时间开始,因此建议您将所需的时区传递到2019-01 is not current month 2019-06 is current month

编辑: Basil Bourque在他的评论中可能有一个很好的观点:如果您的YearMonth.now()类的唯一目的是包装年和月字符串,那么您可能会更好<完全用DateBean替换,而不是用YearMonth包装。

链接: Oracle tutorial: Date Time解释了如何使用java.time。