Это началось как простая ошибка: у меня была YYYY
вместо YYYY
в моей строке формата для объекта SimpleDateFormat
. Но меня полностью сбило с толку результаты моих тестов с неправильной строкой формата.
Этот код:
@Test
public void whatTheHell() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
Date d1 = sdf.parse("01/07/2016");
Date d2 = sdf.parse("02/08/2016");
Date d3 = sdf.parse("11/29/2027");
System.out.println(d1.toString());
System.out.println(d2.toString());
System.out.println(d3.toString());
} catch (ParseException pe) {
fail("ParseException: " + pe.getMessage());
}
}
производит этот вывод:
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026
Я прочитал документацию по параметру "Y" здесь: https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html, но я все еще не вижу логики, которая работает здесь. В частности, последний экземпляр: я могу как-то разобраться, как даты в январе (возможно, февраль) могут быть переведены в декабрь прошлого года, но переключение даты 29 ноября назад на 11 месяцев меня озадачивает. А что такого особенного 27 декабря?
Может ли кто-нибудь объяснить?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
@Я предположил, что проблема с методом toString() может быть проблемой, поэтому я определил формат даты для печати YYYY MM dd '-' yyyy MM dd
в том же коде, что и выше. Вот дополнительный вывод:
2016 12 27 - 2015 12 27
2016 12 27 - 2015 12 27
2027 12 27 - 2026 12 27