Joda parse ISO8601 date en fuseau horaire GMT
J'ai un ISO 8601 date, permet de dire: 2012-01-19T19:00-05:00
Ma machine fuseau horaire est GMT+1
Je suis en train d'utiliser joda analyser cette et de le convertir à la date et l'heure GMT:
DateTimeFormatter simpleDateISOFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mmZZ");
creationDate = simpleDateISOFormat.withZone(DateTimeZone.UTC)
.parseDateTime(date + "T" + time)
.toDate();
Maintenant, le résultat que j'attends est Fri Jan 20 00:00:00 CET 2012
Au lieu de cela je suis arriver: Fri Jan 20 01:00:00 CET 2012
Je crois que c'est parce que je suis dans le fuseau horaire GMT + 1
.
Est-il un moyen pour analyser la date semblant d'être dans un autre fuseau horaire?
Edit: en fait le problème est que lorsque j'appelle la toDate()
méthode. La méthode convertit la DateTime
dans un Date
que j'ai besoin de le faire mais je le transforme en heure locale.
Faire savoir à quelqu'un d'une méthode de conversion qui permet de ne pas imposer cette limitation?
source d'informationauteur Sergio Arrighi
Vous devez vous connecter pour publier un commentaire.
Voici un travail groovy cas de test. Montre combien de fois dans d'autres fuseaux horaires peuvent être affichés.
Remarque:
java.temps
La Joda-Time team nous a dit à migrer vers le java.le temps cadre intégré dans Java 8 et les versions ultérieures. La java.cadre de temps est défini par JSR 310. Une grande partie de la java.le temps de la fonctionnalité a étéporté à Java 6 & 7 et en outre adapté pour Android.
Décalage
La java.les classes de temps comprennent
OffsetDateTime
pour représenter un moment sur la timeline avec un offset-de-UTC mais pas à temps plein de la zone.La java.les classes de temps d'utilisation de la norme ISO 8601 formats par défaut lors de l'analyse ou de la génération de chaînes. Donc pas besoin de définir un modèle de mise en forme.
Fuseau Horaire
Un fuseau horaire est un décalage plus règles de traitement des anomalies telles que l'Heure d'été (DST). Un fuseau horaire nom utilise un
continent/region
format. Vous pouvez attribuer un fuseau horaire (ZoneId
) à unOffsetDateTime
pour obtenir unZonedDateTime
.MODIFIER
https://stackoverflow.com/a/23242779/812919
Est une meilleure solution.
Pour les futurs lecteurs, si vous essayez d'analyser une chaîne de caractères dans le format
yyyyMMddTHHmmssZ
. Il est plus facile d'analyser avec le code suivant. Le Code est dans Kotlin. Le iCalendar réapparaître à la règle est un bon exemple de ce format peut apparaître.