Pergunta

Por que analisar '23:.? 00 PM' com SimpleDateFormat("hh:mm aa") retorno 11 a.m

Foi útil?

Solução

Você deve estar recebendo uma exceção, já que "23:00 PM" não é uma cadeia de caracteres válida, mas facilidade de data / hora do Java é branda por padrão, ao manusear data de análise.

A lógica é que 23:00 PM é de 12 horas depois das 11:00 PM, que é 11:00 do dia seguinte. Você também vai ver coisas como "31 de abril" sendo analisado como "01 de maio" (um dia depois de Abril de 30).

Se você não quiser esse comportamento, defina a propriedade branda para false no seu SimpleDateFormat usando DateFormat # setLenient (boolean) , e você terá uma exceção quando passando em data inválida / vezes.

Outras dicas

Você quer "HH: aa mm" como seu formato, se você vai ser a análise 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));
}

saídas

date = 23:00 PM

Você já tentou HH:mm aa?

HH é para 24 horas enquanto hh é para 12.

Aqui estão as opções de formatação especificada na javadoc

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) 

Observe que "h" seria por horas 1-12. Se você deseja manipular 1-24, tente "k". para 0-23 tentativa "H". Mas eu não esperaria resultados válidos se você está colocando em dados impossível.

23:00 PM poderia ser pensado como 11:00 no dia seguinte . Javascript e PHP trabalho como esse praticamente mas eu não posso falar para Java.

Eu acho que ele faz algo como:

hours = hours % 12;

para garantir que as horas estão na faixa adequada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top