Почему я не понимаю год правильно, используя SimpleDateFormat в Java? - PullRequest
1 голос
/ 22 июня 2009

Я пытаюсь проанализировать данные в формате MySql, я наткнулся на SimpleDateFormat. Я могу получить правильный день и месяц, но я получил странный результат за год:

date = 2009-06-22;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = sdf.parse(date);
System.println(date);
System.println(d.getDate());
System.println(d.getMonth());
System.println(d.getYear());

Выходы:

2009-06-22
22           OK
5            Hum... Ok, months go from 0 to 11
109          o_O WTF ?

Я попытался изменить формат на YYYY-MM-dd (получил ошибку) и yy-MM-dd (ничего не сделал). Я программирую на Android, не знаю, важно ли это.

Пока я обхожу это с помощью разделения, но это грязно и мешает мне использовать функции i18n.

Ответы [ 2 ]

12 голосов
/ 22 июня 2009

Год относится к 1900 году. Это «особенность» класса Date. Попробуйте использовать Calender.

5 голосов
/ 22 июня 2009

Благодаря Аарону, правильная версия:

Calendar c = Calendar.getInstance(); 
c.setTime(sdf.parse(date));
System.println(c.get(Calendar.YEAR));
...