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
Y
i stedet fory
: SymboletY
bruges tilWeek year
mensy
bruges iYear
. Tjek Forskel mellem year-of- æra og ugebaseret år? for at lære mere om det. - Du har brugt
mm
for måned: Det korrekte symbol for måneden erM
. - Du har brugt
MM
i minutter: Det korrekte symbol for minuttet erm
. - Du har vedlagt
Z
inden for enkelte anførselstegn: Symbolet,Z
bruges tilTime zone
hvorimod'Z'
er intet andet end en bogstavelig karakter. Du vil sandsynligvis formatere tidszoneforskydningen af +00:00
somZ
og 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