如何将 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
不要使用 Date
和 SimpleDateFormat
。那些 类 设计不佳且早已过时,后者尤其麻烦。正如 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.
我有一个简单的日期格式器,格式如下:
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
不要使用 Date
和 SimpleDateFormat
。那些 类 设计不佳且早已过时,后者尤其麻烦。正如 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.