Étienne Vallette d'Osia tweeted about a surprising behavior lurking in SimpleDateFormat:
If you use SimpleDateFormat and “YYYY” for years (not “yyyy”), your code currently returns 2015 instead of 2014. Enjoy! (no pb w/ jodatime)
SimpleDateFormat format = new SimpleDateFormat("dd-MMM-YYYY"); Calendar day1 = new GregorianCalendar(2014, Calendar.DECEMBER, 28); System.out.println(format.format(day1.getTime())); Calendar day2 = new GregorianCalendar(2014, Calendar.DECEMBER, 29); System.out.println(format.format(day2.getTime()));
That code prints:
Looks like Twitter for Android probably suffered this bug, and signed out all of its Android users.
This is working as intended! From the SimpleDateFormat docs:
Week Of Year and Week Year
Values calculated for the
WEEK_OF_YEARfield range from 1 to 53. The first week of a calendar year is the earliest seven day period starting on
getFirstDayOfWeek()that contains at least
getMinimalDaysInFirstWeek()days from that year.
For example, January 1, 1998 is a Thursday. If getFirstDayOfWeek() is MONDAY and getMinimalDaysInFirstWeek() is 4 (ISO 8601 standard compatible setting), then week 1 of 1998 starts on December 29, 1997, and ends on January 4, 1998.