Java DateTimeFormatter年中月份格式
我正在尝试将一个瞬间转换为一个字符串,格式为“2021年7月10日,晚上10:00”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
它在我的机器上按预期工作,但在其他环境中显示为“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 argDateTimeFormatter.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 argDateTimeFormatter.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);