这是将在 9 月保留的版本:
final Calendar cal = Calendar.getInstance();
/**/ cal.set(2021, Calendar.SEPTEMBER, 11, 23, 59, 59);
final String pattern = "yyyy-MMM-dd LL LLL EEE EEEE";
final SimpleDateFormat format1 = new SimpleDateFormat(pattern);
System.out.println("Locale..: " + Locale.getDefault());
System.out.println("Calendar: " + cal.getTime());
System.out.println("Pattern.: " + pattern + " -> " + format1.format(cal.getTime()));
System.out.println("Vendor..: " + ManagementFactory.getRuntimeMXBean().getVmVendor());
System.out.println("VM......: " + ManagementFactory.getRuntimeMXBean().getVmName());
System.out.println("Version.: " + ManagementFactory.getRuntimeMXBean().getSpecVersion());
System.out.println("Build...: " + ManagementFactory.getRuntimeMXBean().getVmVersion());
在德国系统上,它为我生成以下输出:
Locale..: de_DE
Calendar: Sat Sep 11 23:59:59 CEST 2021
Pattern.: yyyy-MMM-dd LL LLL EEE EEEE -> 2021-Sept.-11 09 Sep Sa. Samstag
Vendor..: Oracle Corporation
VM......: Java HotSpot(TM) 64-Bit Server VM
Version.: 16
Build...: 16+36-2231
和
Locale..: de_DE
Calendar: Sat Sep 11 23:59:59 CEST 2021
Pattern.: yyyy-MMM-dd LL LLL EEE EEEE -> 2021-Sep-11 09 Sep Sa Samstag
Vendor..: Oracle Corporation
VM......: Java HotSpot(TM) 64-Bit Server VM
Version.: 1.8
Build...: 25.40-b25
在这里,SimpleDateFormat 也为 Month 生成了不同的格式,但 Spec. 有点模糊。它说:
“月份:如果模式字母的数量为3个或更多,则月份被解释为文本”
到目前为止一切都很好,但它使“文本”符合以下条件......
“文本:对于格式,如果模式字母的数量为 4 个或更多,则使用完整形式;否则,如果可用,则使用短形式或缩写形式。”
但是对于我们的示例,有 3 个模式字母,这个简短的形式是什么还不清楚。
但也许“L”会对月份名称有所帮助?