Différence entre hh:mm et HH:mm
Voici mon code d'origine-
String dateString = "23 Dec 2015 1:4 PM";
Locale locale = new Locale("en_US");
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm a", locale);
Date date = null;
try {
date = formatter.parse(dateString);
} catch (ParseException e) {
LOGGER.error(e);
}
String newDate = df.format(date);
System.out.println("oldDate = " + dateString);
System.out.println("newDate = " + newDate);
et voici mon résultat-
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 AM
Il est AM-PM différence entre les oldDate
et newDate
. Maintenant j'ai changé le DateFormat
code-
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm a");
DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm a", locale);
et j'obtiens le résultat escompté, qui est-
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 PM
Je suis conscient que HH
signifie la 24 heures format et hh
signifie la 12 heures format.
Ma question est
Si j'utilise HH:mm a
au lieu de hh:mm a
, ne devrait-il pas être de retour le temps dans de 24 heures format?
(ou)
Si la valeur par défaut est 12 heures format, il ne devrait pas revenir respectifs AM/PM marqueur en fonction de la date d'entrée prévue?
C'est juste pour ma compréhension.
Vous devez vous connecter pour publier un commentaire.
Mise À Jour De Réponse
Ici, le problème est avec
Program flow
ce
simple date formatter
est utilisé pour le format de la date chaîne de la objet Date est créé, voici la partie importante de la réponseQue vous utilisez HH au lieu de hh, le SimpleDateFormater estime qu'à condition chaîne de date dans
24-Hour Format
et simplement ignore laAM/PM marker
ici.L'Objet Date à partir de construit à partir de cette SimpleDateFormatter est passé à la
C'est pourquoi c'est l'impression
si vous modifiez la ligne
avec
Tout se passera en douceur comme il se doit!
Note : lors de la création d'un jeu de paramètres régionaux que vous devriez passer le code de langue et les paramètres Régionaux() constructeur.
en-us
pasen_us
.IMP : le Code est testé sur Java 8 aussi.
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
new Locale("en-us")
est toujours mal.Java 8 (1.8.0_121)
de la langue, comme indiqué dans ma réponse!java.util.Locale
au numéro de ligne700
qui stipule clairement que nous pouvons construire des paramètres Régionaux de langue. Je me réfère àjava 8 (1.8.0-121)
getCountry()
est vide!). De toute évidence, "en-us" est en quelque sorte interprété comme l'anglais quelque part dans la profondeur de la pile de JRE et rend donc vous pensez que ça marcherait. Et l'API est assez clair, celui-paramètres-paramètres régionaux-constructeur utilise uniquement une langue pure paramètre... pas le pays. C'est important si, par exemple, les pays dépendant de la semaine-les règles doivent être déterminés différents en US ou UK.Différence entre hh:mm et HH:mm:
Et la
a
au format hh:mm ou au format HH:mm Am/pm marqueur pour plus d'info, allez sur lienUn test simple est la meilleure réponse à la façon dont le format "HH:mm" est interprétée. Laissez-nous d'abord étudier la mode d'impression:
L'ancien format moteur
SimpleDateFormat
:Java-8 (avec le nouveau package
java.time.format
):Ici nous n'avons pas d'observer tout remplacer dans les deux cas. Je préfère cette approche parce que l'utilisation de la combinaison de "HH" et "a" est à mon avis plutôt une indication d'une erreur de programmation (l'utilisateur n'a visiblement pas pensé assez sur le sens et la description officielle de ces motif de symboles).
Maintenant, laissez-nous étudier la mode d'analyse (et nous allons utiliser le mode strict pour observer ce qui se passe vraiment derrière la scène):
Comment est le comportement dans Java 8? C'est la même chose mais avec un message d'erreur plus clair:
Ce message nous dit que l'analyse de l'heure (au format 24 heures!) avec la valeur "1" indique AM alors que la saisie de texte contient les autres analysée AM/PM-valeur "PM". Cette ambivalence ne peut pas être résolu.
Leçon: Nous devons être prudents avec clément d'analyse où contradictious de l'information peut être ignoré et conduisent à des hypothèses fausses. L'on a accepté la réponse de @Arjun est complètement faux.
Par la route: Veuillez utiliser
Locale.US
ounew Locale("en", "US")
au lieu denew Locale("en-US")
parce que la langue "fr-fr" n'existe pas.