我有一个带有mvn spring-boot:run
的Java Bean,其中包含一个String month
值。
我想使用日历日期将该值与当月或上个月进行比较。我不知道该怎么做。
当前,在"YYYYMM"
bean类中,我使用以下属性:
DateBean
在private String month;
中,我得到了List<DateBean>
的格式值,例如"YYYYMM"
。
我想将其与当前的日历日期进行比较,以检查月份是否为当前月份。
我该怎么做?
答案 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。