簡體   English   中英

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 .

本土化

您可能一直在想用兩個字母表示 AM 和 PM。 但實際上,可能會出現其他文本。

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 ) ;
}

請參閱在 IdeOne.com 上實時運行的代碼

您可以看到許多不同的文本片段是可能的,許多超過兩個字符。 即使那些使用PMpm的人在包含句號時也可能有兩個以上的字符: pm

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
…

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM