DateTimeFormatter - java.lang.IllegalArgumentException:模式字母太多:a
DateTimeFormatter - java.lang.IllegalArgumentException: Too many pattern letters: a
我的 java
代码中有以下行,我在其中尝试格式化日期字符串
ZonedDateTime zonedDateTime= ZonedDateTime.ofInstant(instant, tz);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm aa");
return zonedDateTime.format(formatter);
在第 2 行,我收到此错误:
java.lang.IllegalArgumentException: Too many pattern letters: a
at java.time.format.DateTimeFormatterBuilder.parseField(DateTimeFormatterBuilder.java:1774)
如何为 DateTimeFormatter.ofPattern
创建格式字符串,例如:
2023-04-21 7.00pm
使用一个a
如错误所述,您使用了太多 a
个字符代码。
将 aa
更改为 a
。
本地化
您可能一直在想上午和下午这两个字母。但实际上,可能会出现其他文本。
a
生成的文本取决于本地化过程中使用的人类语言和文化规范。您通过 Locale
指定语言和规范。如果省略,则隐式应用 JVM 当前的默认语言环境。
示例代码
为了好玩,让我们尝试查看所有语言环境中所有可能的输出。
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "h:mm a" ) ;
LocalTime lt = LocalTime.of( 19 , 0 ) ;
for( Locale locale : Locale.getAvailableLocales() )
{
String s = lt.format( f.withLocale( locale ) ) ;
System.out.println( locale + " : " + s ) ;
}
看到这个code run live at IdeOne.com。
您可以看到可以有许多不同的文本片段,很多都超过两个字符。即使那些使用 PM
或 pm
的人在包含句号时也可能有两个以上的字符:p.m.
.
nn : 7:00 ettermiddag
ar_JO : 7:00 م
bg : 7:00 сл.об.
kea : 7:00 pm
nds : 7:00 PM
zu : 7:00 PM
am_ET : 7:00 ከሰዓት
fr_DZ : 7:00 PM
ti_ET : 7:00 ድሕር ሰዓት
bo_CN : 7:00 ཕྱི་དྲོ་
hsb : 7:00 popołdnju
qu_EC : 7:00 p.m.
ta_SG : 7:00 பிற்பகல்
lv : 7:00 pēcpusdienā
en_NU : 7:00 PM
…
我的 java
代码中有以下行,我在其中尝试格式化日期字符串
ZonedDateTime zonedDateTime= ZonedDateTime.ofInstant(instant, tz);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm aa");
return zonedDateTime.format(formatter);
在第 2 行,我收到此错误:
java.lang.IllegalArgumentException: Too many pattern letters: a
at java.time.format.DateTimeFormatterBuilder.parseField(DateTimeFormatterBuilder.java:1774)
如何为 DateTimeFormatter.ofPattern
创建格式字符串,例如:
2023-04-21 7.00pm
使用一个a
如错误所述,您使用了太多 a
个字符代码。
将 aa
更改为 a
。
本地化
您可能一直在想上午和下午这两个字母。但实际上,可能会出现其他文本。
a
生成的文本取决于本地化过程中使用的人类语言和文化规范。您通过 Locale
指定语言和规范。如果省略,则隐式应用 JVM 当前的默认语言环境。
示例代码
为了好玩,让我们尝试查看所有语言环境中所有可能的输出。
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "h:mm a" ) ;
LocalTime lt = LocalTime.of( 19 , 0 ) ;
for( Locale locale : Locale.getAvailableLocales() )
{
String s = lt.format( f.withLocale( locale ) ) ;
System.out.println( locale + " : " + s ) ;
}
看到这个code run live at IdeOne.com。
您可以看到可以有许多不同的文本片段,很多都超过两个字符。即使那些使用 PM
或 pm
的人在包含句号时也可能有两个以上的字符:p.m.
.
nn : 7:00 ettermiddag
ar_JO : 7:00 م
bg : 7:00 сл.об.
kea : 7:00 pm
nds : 7:00 PM
zu : 7:00 PM
am_ET : 7:00 ከሰዓት
fr_DZ : 7:00 PM
ti_ET : 7:00 ድሕር ሰዓት
bo_CN : 7:00 ཕྱི་དྲོ་
hsb : 7:00 popołdnju
qu_EC : 7:00 p.m.
ta_SG : 7:00 பிற்பகல்
lv : 7:00 pēcpusdienā
en_NU : 7:00 PM
…