É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)
He's right.
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:
27-Dec-2014
28-Dec-2015
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_YEAR
field range from 1 to 53. The first week of a calendar year is the earliest seven day period starting ongetFirstDayOfWeek()
that contains at leastgetMinimalDaysInFirstWeek()
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.
Yikes.