GregorianCalendar / Календарь и настройка странности поля ЧАС - PullRequest
6 голосов
/ 28 января 2011

Я пытаюсь создать «фиксированное» время (полночь в 24-часовом формате, т. Е. 00:00:00) для установки в качестве строки для запроса SQL SELECT с использованием следующего ...

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

GregorianCalendar todayDate = new GregorianCalendar();
Log.d(TAG, "todayDate: " + todayDate.getTime().toString());
Log.d(TAG, "formatted todayDate: " + sdf.format(todayDate.getTime()));
todayDate.clear(Calendar.HOUR);
todayDate.clear(Calendar.MINUTE);
todayDate.clear(Calendar.SECOND);
todayDate.set(Calendar.HOUR, 0);
todayDate.set(Calendar.MINUTE, 0);
todayDate.set(Calendar.SECOND, 0);
Log.d(TAG, "formatted modified todayDate: " + sdf.format(todayDate.getTime()));

Это нормально, если текущее время - PM. Например,

todayDate: Fri Jan 28 23:34:34 GMT 2011
formatted todayDate: 2011-01-28 23:34:34
formatted modified todayDate: 2011-01-28 12:00:00 <- THE hour is 12 not 00

Если я делаю это, когда текущее время между полуночью и полуднем (то есть 00:00:00 -> 11:59:59 AM), тогда мой час в отформатированной строке будет правильно установлен на 00. Если я сделаю это это в любое время после полудня и до полуночи, тогда я получаю 12 за час, а не 00.

Может кто-нибудь объяснить это и помочь мне найти решение (или альтернативный способ сделать что-то), пожалуйста?

1 Ответ

13 голосов
/ 28 января 2011

Вам нужно установить HOUR_OF_DAY на 0 вместо HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0);

Из API документы :

HOUR Номер поля для получения и установки с указанием часа утра или дня. ЧАС используется для 12-часовых часов (0 - 11). Полдень и полночь представлены 0, а не 12. Например, в 10: 04: 15.250 PM ЧАС - 10.

HOUR_OF_DAY Номер поля для получения и установки с указанием часа дня. HOUR_OF_DAY используется для 24-часовых часов. Например, в 10: 04: 15.250 PM HOUR_OF_DAY - 22.

...