La manière moderne est avec les classes java.time.
ZonedDateTime
Spécifiez un modèle de mise en forme pour correspondre à votre chaîne d'entrée. Les codes sont similaires à SimpleDateFormat
mais pas exactement. Assurez-vous de lire le document de classe pour DateTimeFormatter
. Notez que nous spécifions un Locale
pour déterminer quel langage humain utiliser pour le nom du jour de la semaine et le nom du mois.
String input = "Wed Jul 08 17:08:48 GMT 2009";
DateTimeFormatter f = DateTimeFormatter.ofPattern ("EEE MMM dd HH:mm:ss z uuuu" , Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse (input , f);
ZDT.toString(): 2009-07-08T17: 08: 48Z [GMT]
Nous pouvons ajuster cela dans n'importe quel autre fuseau horaire.
Spécifiez un proper time zone name au format continent/region
. N'utilisez jamais l'abréviation de 3 à 4 lettres telle que CDT
ou EST
ou IST
car ce ne sont pas de vrais fuseaux horaires, non standardisés, et même pas uniques (!).
Je vais deviner que par CDT
vous vouliez dire un fuseau horaire comme America/Chicago
.
ZoneId z = ZoneId.of("America/Chicago");
ZonedDateTime zdtChicago = zdt.withZoneSameInstant(z);
zdtChicago.toString() 2009-07-08T12: 08: 48-05: 00 [Amérique/Chicago]
Instant
En général, mieux travailler en UTC. Pour cet extrait un Instant
. La classe Instant
représente un moment sur la ligne temporelle dans UTC avec une résolution de nanoseconds (jusqu'à neuf (9) chiffres d'une fraction décimale).
Cette classe Instant
est une classe élémentaire de java.time. Vous pouvez penser à ZonedDateTime
comme Instant
plus un ZoneId
.
Instant instant = zdtChicago.toInstant();
instant.toString(): 2009-07-08T17: 08: 48Z
A propos java.time
Le cadre java.time est construit en Java 8 et plus tard. Ces classes remplacent les vieilles classes de date-heure legacy gênantes telles que java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Le projet Joda-Time, maintenant dans maintenance mode, conseille la migration vers java.time.
Pour en savoir plus, voir le Oracle Tutorial. Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310.
Où obtenir les classes java.time?
- Java SE 8 et SE 9 et plus tard
- 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 SE 7
- Une grande partie de la fonctionnalité de java.time est de retour à Java 6 Ported .
- Android
- Le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus) pour les applications en particulier.
- Voir How to use….
Le projet ThreeTen-Extra java.time étend avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.time. Vous pouvez trouver ici des classes utiles telles que Interval
, YearWeek
, YearQuarter
et more.
Malheureusement, je ne peux pas ajouter une autre dépendance sans plus de paperasse que je veux traiter. Il doit y avoir un moyen de formater les fuseaux horaires en utilisant les bibliothèques java standard. –
Il y a, comme indiqué dans la réponse. Attendez-vous à plus de douleur si vous devez manipuler une autre date/heure. –
Ce n'est pas utile. Le formateur crache toujours le temps en GMT et non le CDT reqeusted. –