Java DateTimeFormatter 月份格式
Java DateTimeFormatter Month Of Year Format
我正在尝试将 Instant 转换为格式为“2021 年 7 月 10 日,10:00 下午”的字符串。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLL yyyy, hh:mm a");
String formattedDate = formatter.withZone(ZoneId.from(ZoneOffset.UTC)).format(instant);
它在我的机器上按预期工作,但在其他环境中显示为“10 7 2021,10:00 PM”。
试试这个代码:这将工作 100%
DateFormat df = new SimpleDateFormat("dd-MMMM-yyyy HH:mm a");
Date date = new Date(System.currentTimeMillis());
String infi = df.format(date);
输出如下
18-May-2021 11:31 PM
使用 MMM 作为月份缩写并指定所需的语言环境
Instant instant = Instant.ofEpochSecond(1_625_954_400);
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("dd MMM uuuu, hh:mm a", Locale.US);
String formattedDate = formatter.withZone(ZoneOffset.UTC).format(instant);
System.out.println(formattedDate);
输出:
10 Jul 2021, 10:00 PM
除了理论上它可能因不同的 Java 版本而异外,这在计算机上应该是稳定的。我不希望它。
你的代码出了什么问题?
很可能您观察到的不一致结果是由于语言环境不同造成的。如果没有另外说明,一个参数 DateTimeFormatter.ofPattern()
会为您提供一个使用 JVM 默认区域设置的格式化程序(通常取自操作系统设置)。这将在具有不同语言和区域设置的计算机和 JVM 上为您提供非常不同的结果。更令人困惑的是,区域设置数据随 Java 版本和区域设置提供程序设置(java.locale.providers
系统 属性)而变化。在我的 Java 8 中,很多语言环境从 LLL
开始给出 7
作为月份,只有德语有 Jul
。在我的 Java 11 上,只有利比里亚的 Vai 语言给出 7
而许多给出 Jul
.
格式模式字母 L
用于月份名称或缩写的独立形式,通常不应在月份是日期的一部分时使用,就像您的情况一样。在大多数语言环境中,L
和 M
给出相同的结果,但有些语言环境是有意而为的。
我正在尝试将 Instant 转换为格式为“2021 年 7 月 10 日,10:00 下午”的字符串。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLL yyyy, hh:mm a");
String formattedDate = formatter.withZone(ZoneId.from(ZoneOffset.UTC)).format(instant);
它在我的机器上按预期工作,但在其他环境中显示为“10 7 2021,10:00 PM”。
试试这个代码:这将工作 100%
DateFormat df = new SimpleDateFormat("dd-MMMM-yyyy HH:mm a");
Date date = new Date(System.currentTimeMillis());
String infi = df.format(date);
输出如下
18-May-2021 11:31 PM
使用 MMM 作为月份缩写并指定所需的语言环境
Instant instant = Instant.ofEpochSecond(1_625_954_400);
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("dd MMM uuuu, hh:mm a", Locale.US);
String formattedDate = formatter.withZone(ZoneOffset.UTC).format(instant);
System.out.println(formattedDate);
输出:
10 Jul 2021, 10:00 PM
除了理论上它可能因不同的 Java 版本而异外,这在计算机上应该是稳定的。我不希望它。
你的代码出了什么问题?
很可能您观察到的不一致结果是由于语言环境不同造成的。如果没有另外说明,一个参数 DateTimeFormatter.ofPattern()
会为您提供一个使用 JVM 默认区域设置的格式化程序(通常取自操作系统设置)。这将在具有不同语言和区域设置的计算机和 JVM 上为您提供非常不同的结果。更令人困惑的是,区域设置数据随 Java 版本和区域设置提供程序设置(java.locale.providers
系统 属性)而变化。在我的 Java 8 中,很多语言环境从 LLL
开始给出 7
作为月份,只有德语有 Jul
。在我的 Java 11 上,只有利比里亚的 Vai 语言给出 7
而许多给出 Jul
.
格式模式字母 L
用于月份名称或缩写的独立形式,通常不应在月份是日期的一部分时使用,就像您的情况一样。在大多数语言环境中,L
和 M
给出相同的结果,但有些语言环境是有意而为的。