Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以同时使用TextStyle.SHORT和TextStyle.FULL解析当月的日期?_Java_Date_Parsing_Java 8_Java Time - Fatal编程技术网

Java 是否可以同时使用TextStyle.SHORT和TextStyle.FULL解析当月的日期?

Java 是否可以同时使用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

Java 8
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我想说,如果你只有两个,选择哪种解决方案并不重要。但是,如果有可能需要解析更多类型的格式,您可能应该选择一个解析器和一个格式化程序(甚至可以嵌套可选部分)。