tl; dr
Utilisez la java.time.Instant
classe pour analyser le texte au format standard ISO 8601, représentant un moment UTC.
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Ce format est défini par la norme ISO 8601 pour les formats de chaîne date-heure.
Tous les deux:
… Utiliser les formats ISO 8601 par défaut pour analyser et générer des chaînes.
Vous devez généralement éviter d'utiliser les anciennes classes java.util.Date /.Calendar & java.text.SimpleDateFormat car elles sont notoirement gênantes, déroutantes et défectueuses. Si nécessaire pour l'interopérabilité, vous pouvez convertir en va-et-vient.
java.time
Le nouveau framework java.time est intégré à Java 8 et versions ultérieures . Inspiré de Joda-Time , défini par JSR 310 , et étendu par le projet ThreeTen-Extra .
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" );
Convertissez-vous dans l'ancienne classe.
java.util.Date date = java.util.Date.from( instant );
Fuseau horaire
Si nécessaire, vous pouvez attribuer un fuseau horaire.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Convertir.
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Joda-Time
MISE À JOUR: Le projet Joda-Time est maintenant en mode maintenance. L'équipe conseille la migration vers les classes java.time .
Voici un exemple de code dans Joda-Time 2.8.
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC );
Convertissez-vous en ancienne classe. Notez que le fuseau horaire attribué est perdu lors de la conversion, car juDate ne peut pas recevoir de fuseau horaire.
java.util.Date date = dateTime_Utc.toDate();
Fuseau horaire
Si nécessaire, vous pouvez attribuer un fuseau horaire.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.*
classes.
Où obtenir les classes java.time?
- Java SE 8 , Java SE 9 et versions ultérieures
- Intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et Java SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
- Versions ultérieures des implémentations de bundle Android des classes java.time.
- Pour les versions antérieures d'Android (<26), le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .