【发布时间】:2021-06-19 00:41:03
【问题描述】:
我有这个线
public static boolean isFirstDayOfMonth(String format, String value) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = null;
try {
date = sdf.parse(value);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
return dayOfMonth == 1;
}
测试并返回 true:
boolean actual = CommonUtil.isFirstDayOfMonth("yyyy-MM-dd", "2021-02-29");
assertTrue(actual);
我发现 SimpleDateFormat 将日期转换为 2021 年 3 月 1 日,虽然 2021 年 2 月不是 29 日。如果我通过 2021-02-30,这是无效的,但它返回正确的结果。
【问题讨论】:
-
我没有看过你的实际问题,但是,我不会再使用
SimpleDateFormat或任何相关的Date类,而是使用java.timeAPI 代替 -
您正在使用 terrible 日期时间类,这些类在几年前被 JSR 310 中定义的 java.time 类所取代。
-
致电
sdf.setLenient(false); -
除了使用 java.time 之外,您还应该更好地尊重单一责任原则。创建一种方法来将您的字符串解释为
LocalDate,并创建另一种方法来确定LocalDate是否属于一个月的第一天。
标签: java simpledateformat