Pourquoi n'analyse '23: 24:00 » avec SimpleDateFormat ( « hh: mm aa ») retour 11 heures?

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

  •  18-09-2019
  •  | 
  •  

Question

Pourquoi est-ce '23 analyse syntaxique: 24:00 » avec SimpleDateFormat("hh:mm aa") retour 11h

.?
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top