Votre format, YYYY-mm-dd'T'HH:MM:ss'Z'
n'est pas correcte. Discutons de tout ce qui ne va pas avec ce format.
- Vous avez utilisé
Y
au lieu dey
: Le symboleY
est utilisé pourWeek year
tandis quey
est utilisé pourYear
. Vérifiez Difference between year-of- ère et semaine-année ? pour en savoir plus. - Vous avez utilisé
mm
pour le mois : Le symbole correct pour le mois estM
. - Vous avez utilisé
MM
pour minutes : Le symbole correct pour la minute estm
. - Vous avez joint
Z
entre guillemets simples : Le symboleZ
est utilisé pourTime zone
alors que'Z'
n'est rien d'autre qu'un caractère littéral. Vous souhaitez probablement formater le décalage horaire de+00:00
commeZ
et pour cela, vous devez en fait utiliserX
.
Ainsi, le format correct est le suivant :
yyyy-MM-dd'T'HH:mm:ssX
Une démo avec le format suggéré :
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(sdf.format(date));
}
}
Sortie :
2021-01-14T08:13:01Z
Notez que l'API date-heure de java.util
et leur API de formatage, SimpleDateFormat
sont obsolètes et sujets aux erreurs. Il est recommandé de cesser complètement de les utiliser et de passer au API date-heure moderne
.
- Pour une raison quelconque, si vous devez vous en tenir à Java 6 ou Java 7, vous pouvez utiliser ThreeTen-Backport qui rétroporte la plupart des java.time fonctionnalité à Java 6 et 7.
- Si vous travaillez pour un projet Android et que votre niveau d'API Android n'est toujours pas compatible avec Java-8, vérifiez API Java 8+ disponibles via désucrage et Comment utiliser ThreeTenABP dans Android Project .
Utilisez Date#toInstant
pour convertir un java.util.Date
objet (le type hérité) à java.time.Instant
(type moderne). Instant
représente un point instantané sur la chronologie et devrait être juste suffisant pour la plupart de vos opérations JSON. Le Instant#toString
renvoie la chaîne date-heure avec décalage de fuseau horaire UTC conforme aux normes ISO-8601
.
Démo :
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Instant instant = date.toInstant();
// Print the value of instant#toString
System.out.println(instant);
OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
System.out.println(odt);
// Custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
System.out.println(dtf.format(odt));
}
}
Sortie :
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z