首页 > 解决方案 > 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 之前工作正常。

标签: javadatedatetime-formatjava-timejava-16

解决方案


永远不要使用日期时间格式/解析类型,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

检查此答案以了解有关uvs的更多信息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 desugaringHow to use ThreeTenABP in Android Project


推荐阅读