Java 是否可以同时使用TextStyle.SHORT和TextStyle.FULL解析当月的日期?
Java 8Java 是否可以同时使用TextStyle.SHORT和TextStyle.FULL解析当月的日期?,java,date,parsing,java-8,java-time,Java,Date,Parsing,Java 8,Java Time,Java 8DateTimeFormatter是从类似d的模式创建的。MMM u只能解析以TextStyle.SHORT(例如2015年2月13日)定义的样式编写的月份日期,这是一个从d创建的日期时间格式。MMMM u只能解析以TextStyle.FULL定义的样式书写的月份日期(例如2015年2月13日) 在“旧”SimpleDataFormat中,“MMM”和“MMMM”之间的区别只对格式化很重要,而不是对解析很重要,因此很容易创建一个能够理解完整和简短月份名称的解析器 有没有可能创建一个J
DateTimeFormatter
是从类似d的模式创建的。MMM u
只能解析以TextStyle.SHORT(例如2015年2月13日
)定义的样式编写的月份日期,这是一个从d创建的日期时间格式。MMMM u
只能解析以TextStyle.FULL定义的样式书写的月份日期(例如2015年2月13日)
在“旧”SimpleDataFormat中,“MMM”和“MMMM”之间的区别只对格式化很重要,而不是对解析很重要,因此很容易创建一个能够理解完整和简短月份名称的解析器
有没有可能创建一个Java 8 DateTimeFormatter也可以这样做?或者我总是要创建两个解析器,一个是完整的,一个是短模式?您可以选择不同的月份模式:
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()
使用另一个格式化程序。好的,我看到的唯一缺点是它现在可以解析“15.JanuaryJan 2015”之类的“断开”字符串,但这并不是什么大问题。还没有决定是否有两个格式化程序/解析器可能不是更优雅的解决方案…@David我想说,如果你只有两个,选择哪种解决方案并不重要。但是,如果有可能需要解析更多类型的格式,您可能应该选择一个解析器和一个格式化程序(甚至可以嵌套可选部分)。