Java SimpleDateFormat(“yyyy-MM-dd PAS'HH:mm:ss Z'”) donne la timezone IST
J'ai SimpleDateFormat constructeur comme
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
et je suis chaîne d'analyse "2013-09-29T18:46:19Z".
Que j'ai lu, ici Z représente le GMT/UTC
fuseau horaire. mais lorsque j'imprime ce jour sur console , Il imprime IST timezne pour la date renvoyée.
Maintenant, ma question est de savoir si mon résultat est bon ou mauvais?
- oui c'est ce que 'Z' représente. Z - Fuseau Horaire
- Z = Zulu time => GMT+0, vous avez évidemment n'est pas de servir votre pays 😉
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas réglé le fuseau horaire seulement ajouté un
Z
à la fin de la date/de l'heure, de sorte qu'il ressemble à un GMT, date/heure, mais cela ne change pas la valeur.Définir le fuseau horaire de GMT et il sera correct.
'T'
et'Z'
sont considérés ici comme des constantes. Vous avez besoin de passerZ
sans les guillemets. En outre, vous devez spécifier le fuseau horaire dans la chaîne d'entrée.Exemple :
2013-09-29T18:46:19-0700
Et le format que
"yyyy-MM-dd'T'HH:mm:ssZ"
-0700
est le fuseau horaire ie -7:00 HrsDe la norme ISO 8601 Chaîne de Java Objet Date
si vous ne définissez pas
TimeZone.getTimeZone("GMT")
, alors il sera de sortieSun Sep 29 18:46:19 CST 2013
De Java Objet Date ISO 8601 Chaîne
Et de convertir
Date
objet à la Norme ISO 8601 (yyyy-MM-dd'T'HH:mm:ss'Z'
) utilisez le code suivantÉgalement noter que sans
' '
à Zyyyy-MM-dd'T'HH:mm:ssZ
imprime2015-01-22T03:41:02+0000
SI vous souhaitez gérer " standard ' représentation JSON de la Date de mieux utiliser ce modèle:
"yyyy-MM-dd'T'HH:mm:ssX"
.Avis de la
X
sur la fin. Il prendra en charge les fuseaux horaires dans norme ISO 8601, et la norme ISO 8601 est exactement ce que produit cette déclaration en Javascriptnew Date().toJSON()
Comparant à d'autres réponses, il a quelques avantages:
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
play
's automatique de formulaire de liaison, et l'utilisation@Format.DateTime
annotation. Utiliser la valeur par défaut de motif avecZ
à la fin semble être incorrect. Après avoir changé deX
, il fonctionne. Merci beaucoupet si vous n'avez pas la possibilité d'aller sur java8 une meilleure utilisation
"aaaa-MM-jj PAS'HH:mm:ssXXX" comme cela est correctement analysée à nouveau (alors qu'avec un seul X cela peut ne pas être le cas... selon votre fonction d'analyse syntaxique)
X génère: +01
XXX génère: +01:00
tl;dr
Autres Réponses sont démodés comme de Java 8.
ISO 8601
Votre format de chaîne de caractères qui arrive à se conformer à la ISO 8601 standard. Cette norme définit sensible formats représentant divers date-heure de valeurs sous forme de texte.
java.temps
L'ancien
java.util.Date
/.Calendar
etjava.text.SimpleDateFormat
classes ont été supplanté par le java.temps cadre intégré dans Java 8 et les versions ultérieures. Voir Tutoriel. Éviter les anciennes classes comme ils l'ont prouvé à être mal conçu, déroutant, et gênants.Partie de la mauvaise conception dans les anciennes classes a mordu à vous, où la
toString
méthode s'applique la JVM par défaut en cours de fuseau horaire lors de la génération d'une représentation textuelle de la date-valeur de temps est en fait en UTC (GMT), bien intentionnés, mais déroutant.La java.les classes de temps utiliser le format ISO 8601 formats par défaut lors de l'analyse, produire des représentations textuelles de la date-heure de valeurs. Donc pas besoin de spécifier un modèle d'analyse.
Un
Instantané
est un moment dans le scénario de UTC.Vous pouvez appliquer un fuseau horaire comme nécessaire pour produire une
ZonedDateTime
objet.