Java SimpleDateFormat 日期实际结果已更改

问题描述

我使用下面的代码来更改日期的日期格式。但是结果更改为不同的日期,变为 12/27/2021。当我检查它时,它说它使用公历。任何人都知道如何解决这个问题。

        String date = "23-03-2021";
        Date d = new SimpleDateFormat("dd-MM-YYYY").parse(date);
        SimpleDateFormat outputFormat = new SimpleDateFormat("MM/dd/YYYY");
        String paymentdate = outputFormat.format(d);
        System.out.println(paymentdate);

实际:

12/27/2021

预期:

03/23/2021

解决方法

问题在于您使用的是 YYYY 而不是 yyyy。我试过你的代码片段,应该可以解决你的问题。

,

使用yyyy代替YYYY,因为Y代表一年中的一周一年中的一周,而y仅代表

根据Java Docs on Week Of Year and Week Year

一周年与 WEEK_OF_YEAR 周期同步。之间的所有周 第一周和最后一周(含)具有相同的周年值。 因此,一周的第一天和最后一天可能会有所不同 日历年值。

修改后的代码:

String date = "23-03-2021";
Date d = new SimpleDateFormat("dd-MM-yyyy").parse(date);
SimpleDateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy");
String paymentdate = outputFormat.format(d);
System.out.println(paymentdate);

输出:

03/23/2021

不要使用 java.util.Date,因为它已被弃用,将来会被删除。更好地使用 java.time 包中的类。

使用 java.time 类的等效代码:

String date = "23-03-2021";
TemporalAccessor d = DateTimeFormatter.ofPattern("dd-MM-yyyy").parse(date);
String paymentdate = DateTimeFormatter.ofPattern("MM/dd/yyyy").format(d);
System.out.println(paymentdate);

输出:

03/23/2021