Calendar.get(Calendar.YEAR)的年份值错误

时间:2018-05-25 11:44:51

标签: java

以下代码的输出错误。

class Test{
        public static void main(String[] args) {
            String dateStr = "May 11, 2019 11:35:34 AM";
            SimpleDateFormat format = new SimpleDateFormat("MMM dd, YYYY HH:mm:ss a");
            try{
                Date d1 = format.parse(dateStr);
                Calendar cal = Calendar.getInstance();
                cal.setTime(d1);
                System.out.println(cal.get(Calendar.YEAR));
                System.out.println(Calendar.YEAR);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

O / P
2018

预期的O / P
2019

2 个答案:

答案 0 :(得分:6)

您应该使用小写y,如下所示:

 SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");

请注意,大写/小写更改结果

| Letter | Date/Time component |
| y      | Year                |
| Y      | Week year           |
| m      | Minute              |
| M      | Month in year       |

答案 1 :(得分:1)

日历有两种类型。 ISO周日和其他一个格里高利。 ISO周日期有52或53个整周,这意味着它不会有正常的365/366天,因为我们知道基于闰年与否,但365/371天(365 + 1周)。 yyyy是我们所知道的正常日历年。

或者,您可以使用GregorianCalendar代替日历,如下所示,以获得YYYY或yyyy的相同结果 -

GregorianCalendar gregcal = new GregorianCalendar();
gregcal.setTime(d1);
System.out.println(gregcal.getWeekYear());