Il tuo formato, YYYY-mm-dd'T'HH:MM:ss'Z'
non è corretto. Discutiamo di tutto ciò che non va in questo formato.
- Hai usato
Y
invece diy
: Il simboloY
è usato perWeek year
mentrey
è usato perYear
. Controlla Differenza tra anno-di- era e settimana-anno? per saperne di più. - Hai usato
mm
per mese: Il simbolo corretto per il mese èM
. - Hai usato
MM
per minuti: Il simbolo corretto per il minuto èm
. - Hai racchiuso
Z
tra virgolette singole: Il simbolo,Z
è usato perTime zone
mentre'Z'
non è altro che un carattere letterale. Probabilmente vuoi formattare l'offset del fuso orario di+00:00
comeZ
e per questo dovresti infatti usareX
.
Quindi, il formato corretto è il seguente:
yyyy-MM-dd'T'HH:mm:ssX
Una demo con il formato suggerito:
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));
}
}
Risultato:
2021-01-14T08:13:01Z
Nota che l'API data-ora di java.util
e la loro API di formattazione, SimpleDateFormat
sono obsoleti e soggetti a errori. Si consiglia di smettere di usarli completamente e passare a API data-ora moderna
.
- Per qualsiasi motivo, se devi attenerti a Java 6 o Java 7, puoi utilizzare ThreeTen-Backport che esegue il backport della maggior parte di java.time funzionalità a Java 6 e 7.
- Se stai lavorando per un progetto Android e il tuo livello API Android non è ancora conforme a Java-8, controlla API Java 8+ disponibili tramite desugaring e Come utilizzare ThreeTenABP nel progetto Android .
Usa Date#toInstant
per convertire un java.util.Date
oggetto (il tipo legacy) in java.time.Instant
(il tipo moderno). Instant
rappresenta un punto istantaneo sulla linea temporale e dovrebbe essere appena sufficiente per la maggior parte delle tue operazioni JSON. Il Instant#toString
restituisce la stringa data-ora con offset del fuso orario UTC conforme agli standard ISO-8601
.
Demo:
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));
}
}
Risultato:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z