Java DateTimeFormat 样式:如何使用 24 小时而不是 AM/PM?
Java DateTimeFormat style: how to use 24 hours instead of AM/PM?
Java DateTimeFormat 样式:如何使用 24 小时而不是 AM/PM?
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.US);
String date = dateFormat.format(new Date());
System.out.print(date);
输出:
11/13/21 6:41:43 PM
需要:
11/13/21 18:41:43
尝试了 DateTimeFormatter,得到了相同的结果:
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT, FormatStyle.MEDIUM);
formatter.withLocale(Locale.US);
String time = formatter.format(LocalDateTime.now());
这适用于所有不同的语言环境,因此模式将不起作用。 Locale.US 仅为示例。
您应该首先检查日期字符串是否匹配任何 Predefined Formatters。
如果没有,那么您必须使用 .ofPattern(String pattern)
或 .ofPattern(String pattern, Locale locale)
:
创建您自己的 Formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss", Locale.US);
System.out.println(formatter.format(LocalDateTime.now()));
输出:
11/13/21 19:41:43
24 小时制不适合某些地区
如果针对美国进行本地化,那么您不应以 24 小时制为目标。除军队外,美国一般不使用 24 小时制。的确,美国人经常把它称为“军事时间”。
所以你的两个陈述“如何使用 24 小时而不是 AM/PM?”和“这适用于所有不同的语言环境”是矛盾的。你不能两者兼得。您想要控制输出,例如强制 24 小时制, 或 您想要本地化。
如果您确实需要特定格式,请使用 。但是,如果您的目标是自动本地化,那么对于结果您就必须“顺其自然”。一些区域设置将本地化为 24 小时制,而一些区域设置将本地化为 12 小时制。
如果您想知道 Java 在哪里获取有关如何本地化日期时间值(翻译和文化规范)的规则,请参阅 [=31= 的大多数实现中的 Common Locale Data Repository (CLDR) maintained by the Unicode Consortium. The CLDR is used by default ] 9及以后。
如果您想查看各种语言环境的实际效果,这里有一些示例代码。
LocalDateTime ldt = LocalDateTime.of( 2021 , 1 , 23 , 18 , 30 , 45 , 0 );
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.SHORT );
for ( Locale locale : Locale.getAvailableLocales() )
{
String output = ldt.format( f.withLocale( locale ) );
System.out.println( output + " | " + locale.getDisplayName( Locale.US ) + " | " + locale );
}
当运行.
…
23.01.21 18:30 | Latvian | lv
23/01/2021, 18:30 | English (Niue) | en_NU
23/01/21 下午6:30 | Chinese (Simplified, Singapore) | zh_SG_#Hans
2021-01-23 6:30 | Fulah (Adlam, Liberia) | ff_LR_#Adlm
23/01/2021, 6:30 pm | English (Jamaica) | en_JM
23/01 2021 18:30 | Kako | kkj
2021-01-23 18:30 | Northern Sami (Latin, Norway) | se_NO_#Latn
2021-01-23 6:30 منجهند، شام | Sindhi (Arabic) | sd__#Arab
23/1/21 18:30 | Spanish (Bolivia) | es_BO
2021-01-23 ཆུ་ཚོད་ 6 སྐར་མ་ 30 ཕྱི་ཆ་ | Dzongkha (Bhutan) | dz_BT
23/1/21, 6:30 পি এম | Manipuri | mni
…
Java DateTimeFormat 样式:如何使用 24 小时而不是 AM/PM?
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.US);
String date = dateFormat.format(new Date());
System.out.print(date);
输出:
11/13/21 6:41:43 PM
需要:
11/13/21 18:41:43
尝试了 DateTimeFormatter,得到了相同的结果:
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT, FormatStyle.MEDIUM);
formatter.withLocale(Locale.US);
String time = formatter.format(LocalDateTime.now());
这适用于所有不同的语言环境,因此模式将不起作用。 Locale.US 仅为示例。
您应该首先检查日期字符串是否匹配任何 Predefined Formatters。
如果没有,那么您必须使用 .ofPattern(String pattern)
或 .ofPattern(String pattern, Locale locale)
:
Formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss", Locale.US);
System.out.println(formatter.format(LocalDateTime.now()));
输出:
11/13/21 19:41:43
24 小时制不适合某些地区
如果针对美国进行本地化,那么您不应以 24 小时制为目标。除军队外,美国一般不使用 24 小时制。的确,美国人经常把它称为“军事时间”。
所以你的两个陈述“如何使用 24 小时而不是 AM/PM?”和“这适用于所有不同的语言环境”是矛盾的。你不能两者兼得。您想要控制输出,例如强制 24 小时制, 或 您想要本地化。
如果您确实需要特定格式,请使用
如果您想知道 Java 在哪里获取有关如何本地化日期时间值(翻译和文化规范)的规则,请参阅 [=31= 的大多数实现中的 Common Locale Data Repository (CLDR) maintained by the Unicode Consortium. The CLDR is used by default ] 9及以后。
如果您想查看各种语言环境的实际效果,这里有一些示例代码。
LocalDateTime ldt = LocalDateTime.of( 2021 , 1 , 23 , 18 , 30 , 45 , 0 );
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.SHORT );
for ( Locale locale : Locale.getAvailableLocales() )
{
String output = ldt.format( f.withLocale( locale ) );
System.out.println( output + " | " + locale.getDisplayName( Locale.US ) + " | " + locale );
}
当运行.
…
23.01.21 18:30 | Latvian | lv
23/01/2021, 18:30 | English (Niue) | en_NU
23/01/21 下午6:30 | Chinese (Simplified, Singapore) | zh_SG_#Hans
2021-01-23 6:30 | Fulah (Adlam, Liberia) | ff_LR_#Adlm
23/01/2021, 6:30 pm | English (Jamaica) | en_JM
23/01 2021 18:30 | Kako | kkj
2021-01-23 18:30 | Northern Sami (Latin, Norway) | se_NO_#Latn
2021-01-23 6:30 منجهند، شام | Sindhi (Arabic) | sd__#Arab
23/1/21 18:30 | Spanish (Bolivia) | es_BO
2021-01-23 ཆུ་ཚོད་ 6 སྐར་མ་ 30 ཕྱི་ཆ་ | Dzongkha (Bhutan) | dz_BT
23/1/21, 6:30 পি এম | Manipuri | mni
…