2

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

在我的 MacOs 和 Java ['openjdk version "11.0.12"'] 下,我得到了"10am"

"10AM" != "10am"

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

有什么建议吗?

4

2 回答 2

6

DateTimeFormatter是一种区域设置敏感类型,即它的解析和格式化取决于Locale. 选中Never use SimpleDateFormat or DateTimeFormatter without a Locale以了解更多信息。

如果您有一个 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()
        );
    }
}

示例运行的输出:

6AM

ONLINE DEMO

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


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

于 2021-10-14T06:53:13.520 回答
1
-Duser.timezone=EDT
-Duser.country=US
-Duser.language=en-US

已解决的问题

于 2021-10-14T07:15:17.797 回答