Dit format, YYYY-mm-dd'T'HH:MM:ss'Z' er ikke korrekt. Lad os diskutere alt, hvad der er galt med dette format.
- Du har brugt
Yi stedet fory: SymboletYbruges tilWeek yearmensybruges iYear. Tjek Forskel mellem year-of- æra og ugebaseret år? for at lære mere om det. - Du har brugt
mmfor måned: Det korrekte symbol for måneden erM. - Du har brugt
MMi minutter: Det korrekte symbol for minuttet erm. - Du har vedlagt
Zinden for enkelte anførselstegn: Symbolet,Zbruges tilTime zonehvorimod'Z'er intet andet end en bogstavelig karakter. Du vil sandsynligvis formatere tidszoneforskydningen af +00:00somZog til dette skal du faktisk brugeX.
Så det korrekte format er som følger:
yyyy-MM-dd'T'HH:mm:ssX
En demo med det foreslåede format:
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));
}
}
Output:
2021-01-14T08:13:01Z
Bemærk, at dato-tids-API'en for java.util og deres formaterings-API, SimpleDateFormat er forældede og fejltilbøjelige. Det anbefales at stoppe helt med at bruge dem og skifte til moderne date-time API
.
- Af en eller anden grund, hvis du skal holde dig til Java 6 eller Java 7, kan du bruge ThreeTen-Backport som backporterer det meste af java.time funktionalitet til Java 6 &7.
- Hvis du arbejder for et Android-projekt, og dit Android API-niveau stadig ikke er kompatibelt med Java-8, skal du tjekke Java 8+ API'er tilgængelige via desugaring og Sådan bruger du ThreeTenABP i Android Project .
Brug Date#toInstant
at konvertere en java.util.Date objekt (den ældre type) til java.time.Instant (den moderne type). Instant repræsenterer et øjeblikkeligt punkt på tidslinjen og burde være lige nok til de fleste af dine JSON-operationer. Instant#toString
returnerer dato-tidsstrengen med UTC tidszone offset, som er kompatibel med ISO-8601 standarder
.
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));
}
}
Output:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z