java - 如何使用 DateTimeFormatter 解析“Feb 25”和“February 25”?
问题描述
我使用以下代码:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MMM dd");
LocalDate date = LocalDate.parse(s, formatter);
解析日期字符串,例如“2019 Feb 25”。但我也希望这段代码解析这样的字符串:“2019 年 2 月 25 日”。我可以以某种方式更改格式字符串“yyyy MMM dd”来实现这一点吗?
我尝试了以下格式字符串“yyyy MMMM dd”、“yyyy MMM[M] dd”、“yyyy [M+] dd”,但我无法同时解析“2019 年 2 月 25 日”和“2019 年 2 月 25 日”。
解决方案
以下基于建议答案的代码片段证明可以使用一个解析器解析不同格式的日期。
但是,不应将此类解析器用于输出,因为它使用多种格式进行打印。
// using several formats in parser
DateTimeFormatter parser = DateTimeFormatter.ofPattern(
"[yyyy [MMMM][MMM] dd][yyyy-MM-dd][MM/dd/yyyy]");
// prepare single format for output
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate d1 = LocalDate.parse ("2019 Feb 31", parser); // parsed correctly to the last Feb day
LocalDate d2 = LocalDate.parse ("2019 February 26", parser);
LocalDate d3 = LocalDate.parse ("2019-02-27", parser);
LocalDate d4 = LocalDate.parse("02/30/2020", parser); // parsed to the last Feb date in a leap year
System.out.println (d1.format (parser));
System.out.println (d1.format (format));
System.out.println (d2.format (format));
System.out.println (d3.format (format));
System.out.println (d4.format (format));
输出
2019 FebruaryFeb 282019-02-2802/28/2019
2019-02-28
2019-02-26
2019-02-27
2020-02-29
parser
输出的第一行被格式弄乱了。
推荐阅读
- javascript - 无法在 Jquery innerHtml 中动态编写 html
- java - 如何在 android 的 KeyBoardView 中设置行的重力?
- c# - TelegramBot 400 错误请求:找不到媒体
- java - [Java]为什么初始for循环以索引i = 0开始后在else条件下中断
- javascript - 为什么 JavaScript 代码会更改“'”字符
- reactjs - 将数据从 MongoDB 存储到状态 - 最佳选择
- python - ValueError:字段 'id' 需要一个数字,但得到了 'favicon.ico'
- google-drive-api - Drive API Permissions 方法:anyWithLink 权限的行为不明确
- azure - Azure DevOps Pipeline - 通配符不触发管道
- wordpress - WooCommerce:如何更改“我的帐户”页面上的文本?