private static final DateTimeFormatter CARD_DATE_FORMAT
= DateTimeFormatter.ofPattern("yyMMdd", Locale.getDefault());
public static Optional<YearMonth> toCardDateFormat(String date) {
try {
return Optional.of(YearMonth.parse(date, CARD_DATE_FORMAT));
} catch (DateTimeParseException e) {
return Optional.empty();
}
}
不要null
从方法返回。呼叫者一方的风险NullPointerException
会很大。如果您认为在字符串格式错误或包含无效日期的情况下不返回值是正确的,请使用Optional
强制调用者考虑没有返回值的可能性。另一个明显的选择是将任何解析异常留给调用者:
public static YearMonth toCardDateFormat(String date) {
return YearMonth.parse(date, CARD_DATE_FORMAT);
}
DateTimeParseException
是未经检查的异常,因此不需要在方法签名中声明。让我们尝试一下:
System.out.println(toCardDateFormat("200908"));
这打印:
2020-09
其他消息:
- 我正在使用并热烈推荐 java.time,这是现代 Java 日期和时间 API。Java 1.0 和 1.1 中的旧日期时间类现在早已过时,
SimpleDateFormat
尤其是出了名的麻烦。我认为你应该避免它们。现代 API 使用起来要好得多。
- 看来您真的更愿意删除月份中的某天,所以您只有月份和年份?java.time 中的
YearMonth
类正是为你做的。相反,如果您想要一个完整的约会,请使用xunts' answerLocalDate
中的课程。
链接: Oracle 教程:日期时间解释如何使用java.time
.