Comment puis-je obtenir ma date au format 2012-11-25T23:50:56.193+01:00
en utilisant SimpleDateFormat
?
Si j'utilise Z
au format comme
yyyy-MM-dd'T'hh:mm:ss.SSSZ
alors ça montre
2013-03-06T11:49:05.490+0100
Vous pouvez obtenir le décalage de fuseau horaire formaté comme +01:00
avec le SimpleDateFormat dans Java 7 (yyyy-MM-dd'T'HH:mm:ss.SSSXXX
), ou avec les Joda DateTimeFormat (yyyy-MM-dd'T'HH:mm:ss.SSSZZ
).
Voici la réponse 2017. S'il y a un moyen possible (qui existe), jetez les classes obsolètes comme SimpleDateFormat
par dessus bord et utilisez les classes modernes et plus pratiques dans Java.time
. En particulier, le format souhaité, 2012-11-25T23:50:56.193+01:00
Est conforme à la norme ISO-8601 et sort donc de la boîte avec les classes les plus récentes, utilisez simplement OffsetDateTime.toString()
:
OffsetDateTime time = OffsetDateTime.now();
System.out.println(time.toString());
Cela imprime quelque chose comme
2017-05-10T16:14:20.407+02:00
Une chose dont vous pouvez ou non vouloir être conscient, cependant, il imprime autant de groupes de 3 décimales sur les secondes qu'il en faut pour imprimer la précision dans l'objet OffsetDateTime
. Apparemment, sur mon ordinateur "maintenant" vient avec une précision de millisecondes (secondes avec trois décimales).
Si vous avez un objet Date
à l'ancienne, par exemple, vous l'avez obtenu à partir d'un appel à une méthode héritée, je recommande la première chose à faire est de le convertir en Instant
, qui est l'un des cours modernes. De là, vous pouvez facilement d'autres conversions en fonction de vos besoins:
Date now = new Date();
OffsetDateTime time = now.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
System.out.println(time.toString());
Je fais vraiment plus de conversions que nécessaire. atZone(ZoneId.systemDefault())
a produit un ZonedDateTime
, et son toString()
ne vous donnera pas toujours le format que vous avez dit souhaité; mais il peut facilement y être formaté:
ZonedDateTime time = now.toInstant().atZone(ZoneId.systemDefault());
System.out.println(time.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));