Java DateTimeFormatter年中月份格式

Java DateTimeFormatter年中月份格式,java,date-formatting,java-time,java.time.instant,datetimeformatter,Java,Date Formatting,Java Time,Java.time.instant,Datetimeformatter,我正在尝试将一个瞬间转换为一个字符串,格式为“2021年7月10日,晚上10:00” 它在我的机器上按预期工作,但在其他环境中显示为“1072021,10:00 PM”。尝试以下代码:这将100%工作。 DateFormat df = new SimpleDateFormat("dd-MMMM-yyyy HH:mm a"); Date date = new Date(System.currentTimeMillis()); String infi = df.f

我正在尝试将一个瞬间转换为一个字符串,格式为“2021年7月10日,晚上10:00”


它在我的机器上按预期工作,但在其他环境中显示为“1072021,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);
并且输出类似于

2021年5月18日下午11:31


试试这段代码:这将100%起作用。

DateFormat df = new SimpleDateFormat("dd-MMMM-yyyy HH:mm a");
    Date date = new Date(System.currentTimeMillis());
    String infi = df.format(date);
并且输出类似于

2021年5月18日下午11:31

使用MMM作为月份缩写,并指定所需的区域设置 输出:

2021年7月10日,晚上10:00

这在计算机上应该是稳定的,除了理论上不同的Java版本可能会有所不同。我不认为会这样

你的代码出了什么问题? 您观察到的不一致结果很可能是由于不同的地区造成的。如果没有其他指示,则one arg
DateTimeFormatter.ofPattern()
会提供一个使用JVM默认区域设置的格式化程序(通常取自操作系统设置)。这将在具有不同语言和区域设置的计算机和JVM上提供非常不同的结果。为了进一步混淆,语言环境数据会随着Java版本和语言环境提供程序设置(Java.locale.providers系统属性)的不同而变化。在我的Java 8上,很多地区从
LLL
开始每月都给出
7
,只有德语给出
Jul
。在我的Java 11上,只有利比里亚的Vai语言给出了
7
,而许多语言给出了
Jul

格式模式字母
L
用于单独的月份名称或缩写形式,通常不应在月份是日期的一部分时使用,因为您的情况就是这样。在大多数语言环境中,
L
M
给出了相同的结果,但也有一些语言环境存在差异并且是故意的。

使用MMM作为月份缩写,并指定所需的语言环境 输出:

2021年7月10日,晚上10:00

这在计算机上应该是稳定的,除了理论上不同的Java版本可能会有所不同。我不认为会这样

你的代码出了什么问题? 您观察到的不一致结果很可能是由于不同的地区造成的。如果没有其他指示,则one arg
DateTimeFormatter.ofPattern()
会提供一个使用JVM默认区域设置的格式化程序(通常取自操作系统设置)。这将在具有不同语言和区域设置的计算机和JVM上提供非常不同的结果。为了进一步混淆,语言环境数据会随着Java版本和语言环境提供程序设置(Java.locale.providers系统属性)的不同而变化。在我的Java 8上,很多地区从
LLL
开始每月都给出
7
,只有德语给出
Jul
。在我的Java 11上,只有利比里亚的Vai语言给出了
7
,而许多语言给出了
Jul


格式模式字母
L
用于单独的月份名称或缩写形式,通常不应在月份是日期的一部分时使用,因为您的情况就是这样。在大多数地区,
L
M
给出了相同的结果,但也有一些地区存在差异,而且是故意的。

你有什么理由在月份使用“LLL”而不是“MMM”吗?也许,它可以帮助你解决你的问题:相关的:(1)(2)(3)(4)(5)你有什么理由用“LLL”代替“MMM”来表示月份吗?也许,它可以帮助您解决您的问题:相关的:(1)(2)(3)(4)(5)与问题“2021年7月10日,晚上10:00”中指定的格式不匹配。请务必避免
SimpleDateFormat
,因为它是一个臭名昭著的类麻烦制造者。OP明智地从java.time询问了
DateTimeFormatter
,java.time是一种现代且卓越的日期和时间API。从您的代码中,我得到了
18-maj-2021 14:37 PM
。我不认为OP想要小的
m
j
。我建议你从100%中减去但是,这与问题“2021年7月10日,晚上10:00”中指定的格式不匹配。请务必避免
SimpleDateFormat
,因为它是一个臭名昭著的麻烦制造者。OP明智地从java.time询问了
DateTimeFormatter
,java.time是一种现代且卓越的日期和时间API。从您的代码中,我得到了
18-maj-2021 14:37 PM
。我不认为OP想要小的
m
j
。我建议你从100%中减去
    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);