Gregoriancalendar / календарь и установка часовой нечетности поля

StackOverflow https://stackoverflow.com/questions/4823721

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top