如何更改 Java 中的时间格式 - “am/pm”与“AM/PM”

THM*_*THM 3 java datetime-format timeofday datetimeformatter

先前创建的测试使用DateTimeFormatter.ofPattern("ha");并返回“10AM”(表示“ 2017-04-09T10:00-06:00[US/Mountain]”)。

在我的 MacO 和 Java 下 ['openjdk version "11.0.12"'] 我得到“10am”

"10AM" != "10am"
Run Code Online (Sandbox Code Playgroud)

在规范中,我看到“ha”应该创建“10AM”而不是“10am”,请参阅:https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

有什么建议吗?

Arv*_*ash 8

DateTimeFormatter是一种区域设置敏感类型,即它的解析和格式化取决于Locale. 检查切勿在没有区域设置的情况下使用 SimpleDateFormat 或 DateTimeFormatter以了解有关它的更多信息。

如果您有 English Locale,并且希望输出始终为单一大小写(即大写),则可以将字符串操作与格式化字符串链接起来,例如

import java.time.LocalTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        System.out.println(
                LocalTime.now(ZoneOffset.UTC)
                    .format(DateTimeFormatter.ofPattern("ha", Locale.ENGLISH))
                    .toUpperCase()
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

示例运行的输出:

6AM
Run Code Online (Sandbox Code Playgroud)

ONLINE DEMO

Trail: Date Time了解有关现代日期时间 API *的更多信息。


* 如果您正在从事 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring 检查可用的 Java 8+ API。请注意,Android 8.0 Oreo 已提供java.time.