如何将 Java 中的 Simple Date Formatter 格式化为 dd-3 letter month-yyyy?

How to format Simple Date Formatter in Java as dd-3 letter month-yyyy?

我有一个简单的日期格式器,格式如下:

private static final String DATE_FORMAT = "yyyy-MM-dd";
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(DATE_FORMAT);
//accessExpiryDate is a Date object
DATE_FORMATTER.format(accessExpiryDate);

并将日期格式化为 yyyy-MM-dd。但我想格式化日期,例如 "2019 年 6 月 1 日"。日 + 月份的前 3 个字母 + 年份。

我怎样才能做到这一点?有简单的 way/method/class 还是我应该编写自定义日期格式化程序方法?

由于您已将日期格式指定为 yyyy-MM-dd,因此已将其格式化。只需将您的日期格式修改为预期的格式即可。

例如:d MMM yyyy

正如@JonSkeet 所建议的,您应该阅读 API 文档。
无论如何,格式应该是你的情况 d MMM yyyy.

java.time

不要使用 DateSimpleDateFormat。那些 类 设计不佳且早已过时,后者尤其麻烦。正如 Jon Skeet 所说,移动到 java.time,现代 Java 日期和时间 API,以获得更好的体验。

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d MMM u", Locale.ENGLISH);
    LocalDate ld = LocalDate.of(2019, Month.JUNE, 1);
    System.out.println(ld.format(dateFormatter));

此片段的输出是:

1 Jun 2019

包括月份的 M 在内的许多格式模式字母可以生成数字或文本,具体取决于您在格式模式字符串中输入的字母数量(这对于 DateTimeFormatter和遗产 SimpleDateFormat)。所以 MM 给你两位数的月份,而 MMM 给你一个月份的缩写(通常是三个字母,但在某些语言中可能更长或更短)。

如果您从遗留的 API 中获得一个您无法更改或不想立即升级的老式 Date 对象,您可以像这样转换它:

    Date accessExpiryDate = getFromLegacyApi();
    LocalDate ld = accessExpiryDate.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDate();

其余同上。现在您已经开始使用现代 API 并且可以按照自己的步调朝这个方向迁移您的代码库。

Link: Oracle tutorial: Date Time 解释如何使用 java.time.