Ошибка при построении даты - PullRequest
1 голос
/ 01 декабря 2011

У меня есть такой код:

Log.d(TAG, "day=%d, month=%d, year=%s", day, month, year);

Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);

Log.i(TAG, "Date is parsed to %tF", c.getTime(), c.get(Calendar.DAY_OF_MONTH));

И это журнал, который я получаю при выполнении:

day=11, month=11, year=1985
Date is parsed to 1985-12-10

Почему бы не 1985-12-11?Он работает правильно для некоторых дат или в режиме отладки.Но почему это не всегда работает?

У меня также есть похожие проблемы при работе с датой и при разборе дат из строки через SimpleDateFormat

РЕДАКТИРОВАТЬ: другие примеры выполнения этого кода:

day=1, month=0, year=2012
Date is parsed to 2012-01-01

day=25, month=11, year=2011
Date is parsed to 2011-12-25

day=4, month=10, year=1979
Date is parsed to 1979-11-03

day=3, month=11, year=1984
Date is parsed to 1984-12-02

день, месяц и год не могут быть изменены из других тем.

Ответы [ 4 ]

1 голос
/ 01 декабря 2011

Месяц 0-11, а день начинается с 1.

месяц

http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#MONTH

день

http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#DAY_OF_MONTH

Edit:

Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, 1985);
c.set(Calendar.MONTH, 11);
c.set(Calendar.DAY_OF_MONTH, 11);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String strdate = sdf.format(c.getTime());
System.out.println(strdate);

Выход:

12/11/1985
1 голос
/ 01 декабря 2011

Месяц в календаре начинается с нуля.Смотрите здесь: http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#MONTH

Я предлагаю вам прочитать это: http://mindprod.com/jgloss/gregoriancalendar.html

Если вы можете, это на самом деле проще и менее подвержено ошибкам joda-time у него гораздо аккуратнее и безопаснее API.

0 голосов
/ 01 декабря 2011

Спасибо за помощь.Кажется, это проблема некоторых устройств Android.Он появился в 3 из 5 устройств.Я исправил это, указав время.

c.set(Calendar.HOUR_OF_DAY, 12);
c.set(Calendar.MINUTE, 30);
0 голосов
/ 01 декабря 2011

Попробуйте это:

Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("MM-dd-yyyy"); 
Log.v("the date is:", simepleDateFormat.format(c.getTime());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...