是否可以解析月份的 TextStyle.SHORT 和 TextStyle.FULL 日期?
Is it possible to parse dates with both TextStyle.SHORT and TextStyle.FULL for the month?
A Java 8 DateTimeFormatter
从类似 d. MMM u
的模式创建,只能解析以 TextStyle.SHORT 定义的样式书写的月份日期(例如 13. Feb 2015
), 从 d. MMMM u
创建的 DateTimeFormatter 只能解析以 TextStyle.FULL 定义的样式书写的月份日期(例如 13. February 2015
)。
在 "old" SimpleDateFormat 中,"MMM" 和 "MMMM" 之间的区别只对格式化很重要,对解析不重要,因此很容易创建一个理解两者的解析器月份名称的完整和简短形式。
是否可以创建一个 Java 8 DateTimeFormatter 也可以做到这一点?还是我总是必须创建两个解析器,一个是 FULL 模式,一个是 SHORT 模式?
您可以将不同的 月 模式设为可选:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d. [MMMM][MMM] u HH:mm:ss z", Locale.US);
ZonedDateTime zdt1 = ZonedDateTime.parse("4. Jan 2015 00:00:00 UTC", formatter);
ZonedDateTime zdt2 = ZonedDateTime.parse("4. January 2015 00:00:00 UTC", formatter);
System.out.println(zdt1);
System.out.println(zdt2);
输出:
2015-01-04T00:00Z[UTC]
2015-01-04T00:00Z[UTC]
编辑
此格式化程序只能用于 parse()
,您必须为 format()
使用不同的格式化程序。
A Java 8 DateTimeFormatter
从类似 d. MMM u
的模式创建,只能解析以 TextStyle.SHORT 定义的样式书写的月份日期(例如 13. Feb 2015
), 从 d. MMMM u
创建的 DateTimeFormatter 只能解析以 TextStyle.FULL 定义的样式书写的月份日期(例如 13. February 2015
)。
在 "old" SimpleDateFormat 中,"MMM" 和 "MMMM" 之间的区别只对格式化很重要,对解析不重要,因此很容易创建一个理解两者的解析器月份名称的完整和简短形式。
是否可以创建一个 Java 8 DateTimeFormatter 也可以做到这一点?还是我总是必须创建两个解析器,一个是 FULL 模式,一个是 SHORT 模式?
您可以将不同的 月 模式设为可选:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d. [MMMM][MMM] u HH:mm:ss z", Locale.US);
ZonedDateTime zdt1 = ZonedDateTime.parse("4. Jan 2015 00:00:00 UTC", formatter);
ZonedDateTime zdt2 = ZonedDateTime.parse("4. January 2015 00:00:00 UTC", formatter);
System.out.println(zdt1);
System.out.println(zdt2);
输出:
2015-01-04T00:00Z[UTC]
2015-01-04T00:00Z[UTC]
编辑
此格式化程序只能用于 parse()
,您必须为 format()
使用不同的格式化程序。