¿Por qué analizar '23: 00 PM' con SimpleDateFormat ( ‘hh: mm aa’) devuelven 11 a.m.?

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

  •  18-09-2019
  •  | 
  •  

Pregunta

¿Por qué analizar '23: 00 PM' con SimpleDateFormat("hh:mm aa") retorno 11 am

.?
¿Fue útil?

Solución

Usted debe estar recibiendo una excepción, ya que "23:00 PM" no es una cadena válida, pero las instalaciones de fecha / hora de Java es indulgente por defecto, cuando el manejo de la fecha de análisis.

La lógica es que 23:00 PM es de 12 horas después de 23:00, que es a las 11:00 AM del día siguiente. También verá cosas como (un día después de abril 30) "31 inocentes" se analiza como "1 may".

Si no desea este comportamiento, establezca la propiedad indulgente con falsa en su SimpleDateFormat usando DateFormat # setLenient (booleano) , y obtendrá una excepción al pasar válidos fecha / horas.

Otros consejos

¿Quieres "HH: MM AA" como formato, si va a estar el tiempo de análisis de 24 horas

.
public static void main(String[] args) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
    final Date date = df.parse("23:00 PM");
    System.out.println("date = " + df.format(date));
}

salidas

date = 23:00 PM

¿Ha tratado HH:mm aa?

HH es para 24 horas mientras hh es para 12.

Estas son las opciones de formato specifed en los href="http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html"

H     Hour in day (0-23)    
k   Hour in day (1-24)  
K   Hour in am/pm (0-11)    
h   Hour in am/pm (1-12) 

Tenga en cuenta que "h" sería por hora 1-12. Si desea manejar 1-24, trata de "k". para 0-23 tratar "H". Pero yo no esperaría resultados válidos si están poniendo en los datos imposible.

23:00 PM podría ser pensado como 11 a.m. el día siguiente . Javascript y PHP funcionan de la siguiente más o menos, pero no puedo hablar en nombre de Java.

Me imagino que lo hace algo como:

hours = hours % 12;

para asegurar que las horas están en el rango apropiado.

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