Mise en forme XmlGregorianCalendar fuseau horaire problème
J'ai besoin de format java XmlGregorianCalendar "aammjj" de la chaîne.
Ma mise en œuvre:
XMLGregorianCalendar date = getDate(); //getting the date
if (date != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
LOG.debug("Parsing date...");
LOG.debug("XML Date: " + date);
LOG.debug("XML Date timezone: " + date.getTimezone());
GregorianCalendar gc = date.toGregorianCalendar();
LOG.debug("Gregorian calendar: " + gc.toString());
LOG.debug("Gregorian calendar timezone id: " + gc.getTimeZone().getID());
Date d = gc.getTime();
LOG.debug("Date: " + d.toString());
String formatted = sdf.format(d);
LOG.debug("Formatted: " + formatted);
}
Ce que je vois dans le journal:
Parsing date...
XML Date: 1943-04-15T00:00:00.000Z
XML Date timezone: 0
Gregorian calendar: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+00:00",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1943,MONTH=3,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=15,DAY_OF_YEAR=1,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
Gregorian calendar timezone id: GMT+00:00
Date: Wed Apr 14 20:00:00 EDT 1943
Formatted: 430414
15 avril a été analysée comme 14 avril. Ce que je fais mal? Quand je devrais réglage du fuseau horaire?
OriginalL'auteur ninja | 2012-02-11
Vous devez vous connecter pour publier un commentaire.
Il a été analysée comme à minuit, le 15 avril, UTC. Il a ensuite été formaté comme 8pm le 14 avril EDT, ce qui est correct que l'EDT est de quatre heures après l'UTC.
Noter que
Date.toString()
utilise toujours le local fuseau horaire - unDate
objet n'a pas de notion de fuseau horaire.Votre valeur mise en forme est aussi en utilisant le fuseau horaire par défaut, que vous n'avez pas spécifié un fuseau horaire. Le calendrier de la valeur (
gc
) est en UTC, mais quand vous le formater, il appliquera le fuseau horaire à partir du module de formatage (comme vous le format de laDate
valeur, ce qui ne veut pas ont un fuseau horaire).Il n'est pas clair ce que vous voulez faire, mais j'espère que ça va aider. En aparté, je voudrais vous recommandons fortement d'utiliser Joda Time au lieu de cela, si vous pouvez éventuellement - il fait beaucoup de cette façon beaucoup plus claire.
OriginalL'auteur Jon Skeet