java - 使用 DateTimeFormatter 解析没有月份的日期

标签 java java-8 java-time

我尝试用这种格式解析日期:ddYYYY。例如,我有字符串 141968,我想知道 day = 14year = 1968

我想我必须直接使用 DateTimeFormatter.parse(String) 提供的 TemporalAccessor,但我找不到如何使用这个结果。在调试时,我看到结果是一个 java.time.Parsed,它不是公开的,但在字段 fieldValues 中包含我想要的信息。

我如何解析这种特殊格式?

谢谢。

最佳答案

一种方法是默认缺少月份字段:

DateTimeFormatter f = new DateTimeFormatterBuilder()
  .appendPattern("ddyyyy")
  .parseDefaulting(MONTH_OF_YEAR, 1)
  .toFormatter();
LocalDate date = LocalDate.parse("141968", f);
System.out.println(date.getDayOfMonth());
System.out.println(date.getYear());

另一种是查询TemporalAccessor:

DateTimeFormatter f = DateTimeFormatter.ofPattern("ddyyyy");
TemporalAccessor parsed = f.parse("141968");
System.out.println(parsed.get(ChronoField.YEAR));
System.out.println(parsed.get(ChronoField.DAY_OF_MONTH));

(注意使用“y”,而不是“Y”进行解析)

关于java - 使用 DateTimeFormatter 解析没有月份的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644949/

相关文章:

java - 从 Git 存储库创建 Eclipse/Java 项目时遇到问题

java - Java 8 中从 Map 到 List 属性的过滤键

java - 需要有关 Java 1.8 的帮助 可选 map

java - 使用 Java 8 DateTimeFormatter 将字符串转换为 LocalDateTime

java - 有没有办法表达 TemporalAmount 的 "sign"?

java - Gif 加载在 Firefox 中停止

java - Weka,如何将数据库mysql表转成arff文件

Java 8 日期和时间时间字段

Java日期时间转换,单元测试远程失败

java - REST API : Multiple versions, 单个应用程序?