Strange behaviour with GregorianCalendar

后端 未结 8 1814
没有蜡笔的小新
没有蜡笔的小新 2021-01-01 22:34

I just encountered a strange behaviour with the GregorianCalendar class, and I was wondering if I really was doing something bad.

This only appends when the initiali

8条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-01 23:08

    Calendar starts with current day - 31 may 2010 in your example. When you set month to February, date changes to 31 February 2010 which normalized to 3 March 2010, so cal.getActualMaximum(Calendar.DAY_OF_MONTH) returns 31 for March.

    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, 2010);
    c.set(Calendar.MONTH, Calendar.MAY);
    c.set(Calendar.DAY_OF_MONTH, 31);
    System.out.println(c.getTime());
    c.set(Calendar.MONTH, Calendar.FEBRUARY);
    System.out.println(c.getTime());
    

    output:

    Mon May 31 20:20:25 GMT+03:00 2010
    Wed Mar 03 20:20:25 GMT+03:00 2010
    

    To fix you code, you can add cal.clear(); or set day 1..28 before setting month

提交回复
热议问题