Gregoriancalendar / календарь и установка часовой нечетности поля
-
26-10-2019 - |
Вопрос
Я пытаюсь создать «Исправленное» время (полночь в 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), тогда мой час в форматированной строке правильно устанавливается на 00. Если я сделаю это на Время после полудня и до полуночи, я получаю 12 за час, а не 00.
Кто -нибудь может объяснить это и помочь мне найти исправление (или альтернативный способ делать вещи), пожалуйста?
Решение
Вам нужно установить HOUR_OF_DAY
к 0
вместо HOUR
todayDate.set(Calendar.HOUR_OF_DAY, 0);
От API док:
HOUR
Номер поля для получения и установки, указывающего час утра или дня. Час используется для 12 -часовых часов (0 - 11). Полдень и полночь представлены 0, а не 12. Например, в 10: 04: 15.250, час 10.
HOUR_OF_DAY
Номер поля для получения и установки, указывающего час дня. Hour_of_day используется для 24-часовых часов. Например, в 10: 04: 15.250 PM The Hour_of_day 22.