2009-07-20 6 views
11

Pourquoi l'analyse «23: 00 PM» avec SimpleDateFormat("hh:mm aa") revient-elle à 11 h?Pourquoi l'analyse de '23: 00 PM 'avec SimpleDateFormat ("hh: mm aa") renvoie-t-elle 11 heures?

+1

ouais ... cette question n'a même pas de sens. poubelle dedans, poubelle dehors. vous avez probablement raison d'ajouter 12 heures en interne pour «pm». – mpen

+0

@Peter: Eh bien, je sais que !! En fait, je découvre le problème après quelques minutes. Ce n'est pas la question ici. (Avez-vous déjà débogué le code d'un autre utilisateur?) – OscarRyz

Répondre

22

Vous devriez obtenir une exception, car "23:00 PM" n'est pas une chaîne valide, mais la fonction de date/heure de Java est lenient par défaut, lors de la gestion de l'analyse des dates. La logique est que 23h00 est 12 heures après 23h00, ce qui est 11h00 le jour suivant. Vous verrez également des choses comme "31 avril" étant analysé comme "1er mai" (un jour après le 30 avril).

Si vous ne souhaitez pas ce comportement, définissez la propriété indentifiable sur false sur votre SimpleDateFormat à l'aide de DateFormat#setLenient(boolean), et vous obtiendrez une exception si vous transmettez une date/heure non valide.

+0

Oh, j'ai déjà vu ce drapeau, et je n'ai jamais su que c'était tout. : P (ne vous en souciez pas) – OscarRyz

+5

Avez-vous maintenant? :) –

1

Je suppose que cela fait quelque chose comme:

hours = hours % 12; 

pour faire en sorte que les heures sont dans la bonne plage.

18

Vous voulez que "HH: mm aa" soit votre format, si vous voulez analyser l'heure sur 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 
+0

SimpleDateFormat df = new SimpleDateFormat ("HH: mm aa"); est de donner un avertissement de la peluche .. avez-vous une idée comment résoudre ce problème? – NovusMobile

+0

Satyam, quel est l'avertissement? –

15

Avez-vous essayé HH:mm aa?

HH est 24 heure alors que hh est pour 12.

2

23:00 PM pourrait être considéré comme 11 heures le lendemain. Javascript et PHP fonctionnent comme ça, mais je ne peux pas parler pour Java.

+0

Voilà ce que je regarde ça se passe. Yeap! – OscarRyz

4

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 0-23, essayez "H". Mais je ne m'attendrais pas à des résultats valables si vous mettez des données impossibles.

Questions connexes