java - SimpleDateFormat - 格式 - 九月 - JDK16
问题描述
我刚刚将 Java 从 JDK-15 升级到 JDK-16,在Date
使用SimpleDateFormat
. 仅 9 月月份,使用格式化时yyyy-MMM-dd
给出 4 个字符而不是 3 个字符。
例如: 2021-Sep-11
显示为2021-Sept-11
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 150);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MMM-dd");
System.out.println(cal.getTime());
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
对我来说似乎是一个错误。我在发行说明中看不到任何更新。任何人都面临类似的问题?在 JDK-15 之前工作正常。
解决方案
永远不要使用日期时间格式/解析类型,Locale
因为文本是Locale
敏感的。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 150);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MMM-dd", Locale.ENGLISH);
System.out.println(cal.getTime());
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
}
}
输出:
2021-Sep-11
请注意,java.util
日期时间 API 及其格式化 APISimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到java.time
现代日期时间 API *。
使用现代日期时间 API:
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Change ZoneId as per your requirement e.g. ZoneId.of("Europe/London")
LocalDate date = LocalDate.now(ZoneId.systemDefault());
date = date.plusDays(150);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MMM-dd", Locale.ENGLISH);
String formatted = dtf.format(date);
System.out.println(formatted);
}
}
输出:
2021-Sep-11
检查此答案以了解有关u
vs的更多信息y
。
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
推荐阅读
- ruby-on-rails - “推送被拒绝,无法编译 Ruby 应用程序”在 herouku 上安装 decdim
- spring-batch - 将 MDC 上下文映射复制到 SimpleAsyncTaskExecutor 的工作线程
- bash - bash读取多个文本文件并设置变量
- excel - 如何在用户窗体的主代码中从列表框中引用变量?
- excel - 是否可以根据另一个单元格中的值来保护/取消保护一个单元格?
- awk - 如何使用 sed 将一条线放在另一条线的前面?
- ansible - 如何在 Cisco 路由器上的 Ansible 中运行 Privilege Exec 命令
- php - 使用 PHP 输出上个月和当前年份
- google-sheets - Sumif 索引和匹配 & 谷歌表
- javascript - 谷歌材料设计网页顶部应用栏图标点击正在删除 vue-router 链接?