循环所有可能的值
是的,您可以轻松地循环遍历可能的 FormatStyle 值。
EnumSet
那个类是一个enum,提供了几个预定义的对象。您可以通过调用EnumSet.allOf 来获取这些对象的集合。
EnumSet< FormatStyle > styles = EnumSet.allOf( FormatStyle.class ) ;
嵌套循环
所以我们需要一对nested loops:一个外部循环使用每种可能的样式用于日期部分,一个内部循环使用每种可能的样式用于时间部分。
对于日期样式和时间样式的每种组合,我们为特定的Locale 实例化一个DateTimeFormatter。
ZonedDateTime zdt = ZonedDateTime.now( );
System.out.println( "---| " + zdt + " |-------------" );
Locale locale = Locale.US;
for ( FormatStyle styleDate : EnumSet.allOf( FormatStyle.class ) )
{
for ( FormatStyle styleTime : EnumSet.allOf( FormatStyle.class ) )
{
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( styleDate , styleTime ).withLocale( locale );
String output = zdt.format( f );
int padSpacesOutTo = 17 ; // The longest possible value is "MEDIUM | MEDIUM", with a length of 15 characters.
String styles = styleDate + " | " + styleTime ;
String stylesLabel = String.format("%1$-" + padSpacesOutTo + "s", styles ) ;
System.out.println( stylesLabel + output );
}
}
Locale.US 的输出。
---| 2017-09-11T13:15:02.193544-07:00[America/Los_Angeles] |-------------
FULL | FULL Monday, September 11, 2017 at 1:15:02 PM Pacific Daylight Time
FULL | LONG Monday, September 11, 2017 at 1:15:02 PM PDT
FULL | MEDIUM Monday, September 11, 2017, 1:15:02 PM
FULL | SHORT Monday, September 11, 2017, 1:15 PM
LONG | FULL September 11, 2017 at 1:15:02 PM Pacific Daylight Time
LONG | LONG September 11, 2017 at 1:15:02 PM PDT
LONG | MEDIUM September 11, 2017, 1:15:02 PM
LONG | SHORT September 11, 2017, 1:15 PM
MEDIUM | FULL Sep 11, 2017, 1:15:02 PM Pacific Daylight Time
MEDIUM | LONG Sep 11, 2017, 1:15:02 PM PDT
MEDIUM | MEDIUM Sep 11, 2017, 1:15:02 PM
MEDIUM | SHORT Sep 11, 2017, 1:15 PM
SHORT | FULL 9/11/17, 1:15:02 PM Pacific Daylight Time
SHORT | LONG 9/11/17, 1:15:02 PM PDT
SHORT | MEDIUM 9/11/17, 1:15:02 PM
SHORT | SHORT 9/11/17, 1:15 PM
再次,使用Locale.CANADA_FRENCH。
---| 2017-09-11T13:32:00.434143-07:00[America/Los_Angeles] |-------------
FULL | FULL lundi 11 septembre 2017 à 13:32:00 heure avancée du Pacifique
FULL | LONG lundi 11 septembre 2017 à 13:32:00 HAP
FULL | MEDIUM lundi 11 septembre 2017 13:32:00
FULL | SHORT lundi 11 septembre 2017 13:32
LONG | FULL 11 septembre 2017 à 13:32:00 heure avancée du Pacifique
LONG | LONG 11 septembre 2017 à 13:32:00 HAP
LONG | MEDIUM 11 septembre 2017 13:32:00
LONG | SHORT 11 septembre 2017 13:32
MEDIUM | FULL 11 sept. 2017 13:32:00 heure avancée du Pacifique
MEDIUM | LONG 11 sept. 2017 13:32:00 HAP
MEDIUM | MEDIUM 11 sept. 2017 13:32:00
MEDIUM | SHORT 11 sept. 2017 13:32
SHORT | FULL 17-09-11 13:32:00 heure avancée du Pacifique
SHORT | LONG 17-09-11 13:32:00 HAP
SHORT | MEDIUM 17-09-11 13:32:00
SHORT | SHORT 17-09-11 13:32
看到这个code run live at IdeOne.com。警告:IdeOne 仅使用 Locale.US 并忽略所有其他语言环境。
留给读者作为一个执行:疯狂并在嵌套外部添加第三个循环,用于从Locale.getAvailableLocales() 返回的数组中的每个Locale。 ……或者看看the Answer by Hugo。