Ihr Format, YYYY-mm-dd'T'HH:MM:ss'Z'
das ist nicht richtig. Lassen Sie uns alles diskutieren, was mit diesem Format nicht stimmt.
- Sie haben
Y
verwendet statty
: Das SymbolY
wird fürWeek year
verwendet währendy
wird fürYear
verwendet . Überprüfen Sie Difference between year-of- Ära und wochenbasiertes Jahr? um mehr darüber zu erfahren. - Sie haben
mm
verwendet für Monat: Das richtige Symbol für den Monat istM
. - Sie haben
MM
verwendet minutenlang: Das korrekte Symbol für die Minute istm
. - Sie haben
Z
beigefügt in einfachen Anführungszeichen: Das SymbolZ
wird fürTime zone
verwendet wohingegen'Z'
ist nichts anderes als ein Zeichenliteral. Wahrscheinlich möchten Sie den Zeitzonen-Offset von+00:00
formatieren alsZ
und dafür sollten Sie eigentlichX
verwenden .
Das richtige Format lautet also wie folgt:
yyyy-MM-dd'T'HH:mm:ssX
Eine Demo mit dem vorgeschlagenen 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));
}
}
Ausgabe:
2021-01-14T08:13:01Z
Beachten Sie, dass die Date-Time-API von java.util
und ihre Formatierungs-API, SimpleDateFormat
sind veraltet und fehleranfällig. Es wird empfohlen, diese vollständig einzustellen und auf moderne Datum-Uhrzeit-API
.
- Wenn Sie sich aus irgendeinem Grund an Java 6 oder Java 7 halten müssen, können Sie ThreeTen-Backport die den größten Teil der java.time zurückportiert Funktionalität zu Java 6 &7.
- Wenn Sie für ein Android-Projekt arbeiten und Ihr Android-API-Level immer noch nicht mit Java-8 kompatibel ist, überprüfen Sie Java 8+ APIs verfügbar durch Desugaring und How to use ThreeTenABP in Android Project .
Verwenden Sie Date#toInstant
um ein java.util.Date
umzuwandeln Objekt (der alte Typ) zu java.time.Instant
(der moderne Typ). Instant
stellt einen augenblicklichen Punkt auf der Zeitachse dar und sollte für die meisten Ihrer JSON-Operationen gerade ausreichen. Der Instant#toString
gibt die Datum-Uhrzeit-Zeichenfolge mit UTC-Zeitzonen-Offset zurück, die den ISO-8601-Standards
entspricht .
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));
}
}
Ausgabe:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z