J'ai le constructeur SimpleDateFormat comme
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
et j'analyse la chaîne "2013-09-29T18:46:19Z".
J'ai lu qu'ici Z représente le GMT/UTC
fuseau horaire. mais quand j'imprime cette date sur la console, il imprime le fuseau horaire IST pour la date retournée.
Maintenant, ma question est de savoir si ma sortie est bonne ou mauvaise?
java
date
timezone
date-format
simpledateformat
Pradip Borde
la source
la source
Réponses:
Vous n'avez pas défini le fuseau horaire uniquement ajouté un
Z
à la fin de la date / heure, donc cela ressemblera à une date / heure GMT mais cela ne change pas la valeur.Réglez le fuseau horaire sur GMT et ce sera correct.
la source
'T'
et'Z'
sont considérés ici comme des constantes. Vous devez passerZ
sans les guillemets. De plus, vous devez spécifier le fuseau horaire dans la chaîne d'entrée.Exemple:
2013-09-29T18:46:19-0700
Et le format comme"yyyy-MM-dd'T'HH:mm:ssZ"
la source
-0700
est le fuseau horaire ie -7: 00 HrsDe la chaîne ISO 8601 à l'objet de date Java
si vous ne définissez pas,
TimeZone.getTimeZone("GMT")
il afficheraSun Sep 29 18:46:19 CST 2013
De l'objet de date Java à la chaîne ISO 8601
Et pour convertir un
Date
objet en ISO 8601 Standard (yyyy-MM-dd'T'HH:mm:ss'Z'
), utilisez le code suivantNotez également que sans les impressions
' '
à Zyyyy-MM-dd'T'HH:mm:ssZ
2015-01-22T03:41:02+0000
la source
SI vous voulez gérer « norme » représentation JSON de la date alors préférable d'utiliser ce modèle:
"yyyy-MM-dd'T'HH:mm:ssX"
.Remarquez le
X
à la fin. Il gérera les fuseaux horaires dans la norme ISO 8601 , et ISO 8601 est exactement ce qui produit cette déclaration en Javascriptnew Date().toJSON()
Comparé à d'autres réponses, il présente certains avantages:
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
la source
play
liaison automatique de formulaire et j'utilise l'@Format.DateTime
annotation. Utiliser le modèle par défaut avecZ
à la fin semble incorrect. Après avoir changé enX
, cela fonctionne. Merci beaucouptl; dr
Les autres réponses sont obsolètes à partir de Java 8.
ISO 8601
Le format de votre chaîne est conforme à la norme ISO 8601 . Cette norme définit des formats sensibles pour représenter diverses valeurs date-heure sous forme de texte.
java.time
Les anciennes classes
java.util.Date
/.Calendar
etjava.text.SimpleDateFormat
ont été remplacées par le framework java.time intégré à Java 8 et versions ultérieures. Voir le didacticiel . Évitez les anciennes classes car elles se sont avérées mal conçues, déroutantes et gênantes.Une partie de la mauvaise conception des anciennes classes vous a mordu, où la
toString
méthode applique le fuseau horaire par défaut actuel de la JVM lors de la génération d'une représentation textuelle de la valeur date-heure qui est en fait en UTC (GMT); bien intentionné mais déroutant.Les classes java.time utilisent les formats ISO 8601 par défaut lors de l'analyse / génération de représentations textuelles des valeurs date-heure. Donc pas besoin de spécifier un modèle d'analyse.
An
Instant
est un moment sur la chronologie en UTC .Vous pouvez appliquer un fuseau horaire selon vos besoins pour produire un
ZonedDateTime
objet.la source
et si vous n'avez pas l'option d'aller sur java8, mieux vaut utiliser 'yyyy-MM-dd'T'HH: mm: ssX XX ' car cela est correctement analysé à nouveau (alors qu'avec un seul X, cela peut ne pas être le cas. .. en fonction de votre fonction d'analyse)
X génère: +01
XXX génère: +01: 00
la source
Pour Java 8: vous pouvez utiliser intégré
java.time.format.DateTimeFormatter
pour réduire tout risque de fautes de frappe, commeISO_ZONED_DATE_TIME représente l'
2011-12-03T10:15:30+01:00[Europe/Paris]
un des formats DateTime standard fournis par le lien Oraclela source