Проблема Android SimpleDateFormat - PullRequest
2 голосов
/ 13 сентября 2011
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = (Date)formatter.parse("2011-09-13");
Log.e(MY_DEBUG_TAG, "Output is "+ date.getYear() + " /" + date.getMonth() + " / "+ (date.getDay()+1));

Нет, выкладываю

09-13 14:20:18.740: ERROR/GoldFishActivity(357): Output is 111 /8 / 3

В чем проблема?

Ответы [ 2 ]

6 голосов
/ 13 сентября 2011

Методы, которые вы используете в классе Date, устарели.

  • Вы получаете 111 за год, потому что getYear() возвращает значение, которое является результатом вычитания 1900 из годато есть 2011 - 1900 = 111.
  • Вы получаете 3 за день, потому что getDay() возвращает день недели и 3 = Wednesday.getDate() возвращает день месяца, но это также устарело.

Вместо этого следует использовать класс Calendar.

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = (Date)formatter.parse("2011-09-13");        
Calendar cal = Calendar.getInstance();  
cal.setTime(date);
Log.e(MY_DEBUG_TAG, "Output is "+ cal.get(Calendar.YEAR)+ " /" + (cal.get(Calendar.MONTH)+1) + " / "+ cal.get(Calendar.DAY_OF_MONTH));
4 голосов
/ 13 сентября 2011

Внимательно прочитайте javadoc из java.util.Date.

getYear возвращает количество лет с 1900 года.

getMonth возвращает месяц, начиная с0 (0 = январь, 1 = февраль и т. Д.).

getDay возвращает день недели (0 = воскресенье, 1 = понедельник и т. Д.), А не день месяца.

И все эти методы устарели.Вы не должны больше их использовать.

...