1

下面的简单测试用例给出的结果与预期不同。

import javax.xml.datatype.XMLGregorianCalendar;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {

            XMLGregorianCalendar xmlDate = new XMLGregorianCalendarImpl();
            xmlDate.setMonth(12);
            xmlDate.setDay(31);
            xmlDate.setYear(2019);
            xmlDate.setHour(0);
            xmlDate.setMinute(0);
            xmlDate.setSecond(0);
            Calendar calendar = xmlDate.toGregorianCalendar();
            SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
            Date dt = calendar.getTime();
           String ds1 = dt.toString();
           System.out.println("ds1 = " + ds1);
           String dateString = formatter.format(calendar.getTime());
           System.out.println("dateString = " + dateString );

    }
}

我无法弄清楚为什么 dateString 的年份部分显示为 2020 而不是 2019。

ds1 = Tue Dec 31 00:00:00 EST 2019
dateString = 2020-12-31 00:00:00
4

1 回答 1

3

请将您的代码更改为

import javax.xml.datatype.XMLGregorianCalendar;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {

            XMLGregorianCalendar xmlDate = new XMLGregorianCalendarImpl();
            xmlDate.setMonth(12);
            xmlDate.setDay(31);
            xmlDate.setYear(2019);
            xmlDate.setHour(0);
            xmlDate.setMinute(0);
            xmlDate.setSecond(0);
            Calendar calendar = xmlDate.toGregorianCalendar();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date dt = calendar.getTime();
           String ds1 = dt.toString();
           System.out.println("ds1 = " + ds1);
           String dateString = formatter.format(calendar.getTime());
           System.out.println("dateString = " + dateString );

    }
}

因为 YYYY 代表一周中的年份,而 yyyy 代表简单日期格式的日历年。

此处有更多解释:Java SimpleDateFormat 将日期移动一年

于 2019-12-23T21:48:25.207 回答