Pourquoi n'analyse '23: 24:00 » avec SimpleDateFormat ( « hh: mm aa ») retour 11 heures?
-
18-09-2019 - |
Question
Pourquoi est-ce '23 analyse syntaxique: 24:00 » avec SimpleDateFormat("hh:mm aa")
retour 11h
La solution
Vous devriez obtenir une exception, puisque "23:00 PM" n'est pas une chaîne valide, mais l'installation date / heure de Java est indulgente par défaut, lors de la manipulation de la date parsing.
La logique est que 23:00 PM est de 12 heures après 23h00, qui est 11h00 le jour suivant. Vous verrez aussi des choses comme du « 31 Avril » être analysé comme « Mai 1 » (un jour après le 30 Avril).
Si vous ne voulez pas ce comportement, définissez la propriété indulgente false sur votre SimpleDateFormat en utilisant DateFormat # setLenient (Boolean) , et vous obtiendrez une exception lors du passage en date / temps non valides.
Autres conseils
Vous voulez "HH: mm aa" comme format, si vous devez analyser 24 heures
.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));
}
sorties
date = 23:00 PM
Avez-vous essayé HH:mm aa
?
HH
est 24 heure alors que hh
est 12.
Voici les options de formatage spécifiées dans la 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)
Notez que « h » serait pendant des heures 1-12. Si vous voulez gérer 1-24, essayez « k ». pour essayer 0-23 "H". Mais je ne serais pas attendre à des résultats valables si vous mettez des données impossible.
23:00 PM pourrait être considéré comme 11 heures le lendemain . Javascript et PHP travailler comme ça à peu près, mais je ne peux pas parler pour Java.
Je suppose que cela fait quelque chose comme:
hours = hours % 12;
pour faire en sorte que les heures sont dans la plage appropriée.