2 votes

Jersey a écrit mon horodatage mysql sous la forme 2011-09-28T21:48:25Z ; comment puis-je le formater en Java ?

J'ai un backend mysql qui a un champ timestamp qui est automatiquement défini comme currenttimestamp comme ceci ( date_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP). Après avoir lu la valeur comme Date, Jersey envoie un xml où l'horodatage est indiqué comme

<timestamp>2011-09-28T21:48:25Z</timestamp>

S'il te plaît, n'en fais pas trop sur l'histoire du passé : Je ne peux pas changer ce que je reçois de Jersey. Maintenant ma question est la suivante : comment puis-je analyser la date 2011-09-28T21:48:25Z de xml comme une date que Java comprend ?

Merci.

1voto

Basil Bourque Points 8938

En résumé

Instant.parse( "2011-09-28T21:48:25Z" ) 

ISO 8601

Votre chaîne d'entrée est en standard ISO 8601 format.

Jersey n'est pas pertinent, sauf que ses concepteurs ont judicieusement choisi d'utiliser les formats ISO 8601 pour sérialiser les valeurs de date et d'heure sous forme de chaînes de caractères.

java.time

Les classes java.time intégrées à Java utilisent par défaut les formats ISO 8601 pour l'analyse et la génération des chaînes de caractères. Il n'est donc pas nécessaire de spécifier un modèle de formatage.

UTC

En Z à l'extrémité est le diminutif de Zulu et signifie UTC (GMT).

Instant

En Instant représente un moment sur la ligne de temps dans UTC avec une résolution de nanosecondes .

Instant instant = Instant.parse( "2011-09-28T21:48:25Z" );

Fuseau horaire

Ajuster que Instant dans le fuseau horaire de votre choix.

Indiquez un nom du fuseau horaire approprié . N'utilisez jamais l'abréviation de 3-4 lettres telle que EST o IST car il ne s'agit pas de véritables fuseaux horaires, ils ne sont pas normalisés et ne sont même pas uniques ( !).

ZoneId z = ZoneId.of( "America/Montreal" );  // Or "Asia/Kolkata" etc.
ZonedDateTime zdt = instant.atZone( z );

Cordes

Ne pas confondre les valeurs de date et d'heure avec les chaînes de caractères qui représentent ces valeurs.

Vous pouvez demander aux objets java.time de générer une chaîne dans le format que vous souhaitez. Mais il est généralement préférable de laisser les objets DateTimeFormatter localiser automatiquement pour vous.

Locale l = Locale.CANADA_FRENCH;  // Or Locale.US, Locale.ITALY, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( l );
String output = zdt.format( f );

0voto

mazaneicha Points 1653

D'abord,

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") ;
df.setTimeZone(TimeZone.getTimeZone("Zulu")) ;
Date dd = df.parse("2011-09-28T21:48:25Z") ;

...puis, en option,

Timestamp ts = new Timestamp(dd.getTime()) ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X