这个问题在这里已经有答案了:
在java中解析格式“2010年1月10日”的日期(带顺序指示器,st | nd | rd | th)(4个答案)
您如何将一个月的某一天格式化为“11”、“21”或“23”(顺序指示符)(20个答案)
上个月关门了。
我有输入日期 April 17th, 2024
. 这个日期是由google语音到文本服务构建的。
要将此日期格式化为不同的格式,我将使用下一个代码:
String input = "April 17th, 2024";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM d, uuuu" )
.withLocale( Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
LocalDate ld = zdt.toLocalDate();
DateTimeFormatter fLocalDate = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
String output = ld.format( fLocalDate);
System.out.println(output);
…问题是输入日期应该是 April 17, 2024
或者说模式需要改进。
非常严格的解决办法是在数字后删掉字母。
我更希望避免添加额外的逻辑,并改进输入数据的日期模式。正是这一步我需要帮助(我在javadoc中找不到正确的解决方案)。
因此,我希望得到格式化程序的更正或确认,即java不支持日期可以为空的标准 17th
, 3rd
等等。
2条答案
按热度按时间lskq00tm1#
java的日期格式化程序/解析器不支持序数。
你喜欢什么并不重要,在调用解析器之前,你必须自己删除序数后缀。
其实没那么糟。
fxnxkyjh2#
看来
java.time
不支持序数。我能想到的一个“模式解决方案”是使用可选部分(即字符之间的部分)
[
以及]
):MMMM d['th']['st']['nd']['rd'], yyyy
例如:它将拒绝其他字符:
但它会接受。
April 1th, 2024
,即使不是严格正确的:它也会接受
January 3thstndrd, 2024
. 我不知道是否有问题: