Pregunta

Estoy tratando de crear un tiempo 'fijo' (medianoche en el formato de reloj de 24 horas, es decir, 00:00:00) para configurar como una cadena para una consulta de selección SQL usando lo siguiente ...

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()));

Esto está bien a menos que la hora actual sea PM. Por ejemplo,

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

Si hago esto cuando la hora actual es entre la medianoche y el mediodía (es decir, 00:00:00 -> 11:59:59 am), entonces mi hora en la cadena formateada se establece correctamente en 00. Si lo hago en algún Hora después del mediodía y antes de la medianoche, obtengo 12 durante mi hora y no 00.

¿Alguien puede explicar esto y ayudarme a encontrar una solución (o una forma alternativa de hacer las cosas) por favor?

¿Fue útil?

Solución

Necesitas establecer HOUR_OF_DAY a 0 en vez de HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0);

De la API documentos:

HOUR Número de campo para obtener y establecer indicando la hora de la mañana o la tarde. La hora se usa para el reloj de 12 horas (0 - 11). El mediodía y la medianoche están representados por 0, no por 12. por ejemplo, a las 10: 04: 15.250 pm La hora es 10.

HOUR_OF_DAY Número de campo para obtener y establecer indicando la hora del día. Hour_of_day se usa para el reloj de 24 horas. Por ejemplo, a las 10: 04: 15.250 pm, la hora_of_day es 22.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top