Twój format, YYYY-mm-dd'T'HH:MM:ss'Z'
nie jest poprawne. Omówmy wszystko, co jest nie tak w tym formacie.
- Użyłeś
Y
zamiasty
: SymbolY
jest używany dlaWeek year
podczas gdyy
jest używany dlaYear
. Sprawdź Różnica między rokiem era i rok oparty na tygodniu? aby dowiedzieć się więcej na ten temat. - Użyłeś
mm
na miesiąc: Prawidłowy symbol miesiąca toM
. - Użyłeś
MM
przez minuty: Prawidłowy symbol minuty tom
. - Załączyłeś
Z
w pojedynczych cudzysłowach: SymbolZ
jest używany dlaTime zone
podczas gdy'Z'
to nic innego jak literał znakowy. Prawdopodobnie chcesz sformatować przesunięcie strefy czasowej na+00:00
jakoZ
i w tym celu powinieneś użyćX
.
Prawidłowy format jest więc następujący:
yyyy-MM-dd'T'HH:mm:ssX
Demo z sugerowanym formatem:
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));
}
}
Wyjście:
2021-01-14T08:13:01Z
Zauważ, że data-czas API java.util
i ich formatowanie API, SimpleDateFormat
są przestarzałe i podatne na błędy. Zaleca się całkowite zaprzestanie ich używania i przejście na nowoczesny interfejs API data-czas
.
- Z jakiegokolwiek powodu, jeśli musisz trzymać się Javy 6 lub Javy 7, możesz użyć Trzy dziesięć backportów która obsługuje większość czasu java.time funkcjonalność dla Javy 6 i 7.
- Jeśli pracujesz nad projektem na Androida, a Twój poziom interfejsu API Androida nadal nie jest zgodny z Java-8, sprawdź Interfejsy API Java 8+ dostępne po usunięciu cukru i Jak używać ThreeTenABP w Android Project .
Użyj Date#toInstant
przekonwertować java.util.Date
obiekt (starszy typ) do java.time.Instant
(nowoczesny typ). Instant
reprezentuje chwilowy punkt na osi czasu i powinien wystarczyć do większości operacji JSON. Instant#toString
zwraca ciąg daty i godziny z przesunięciem strefy czasowej UTC, który jest zgodny ze standardami 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));
}
}
Wyjście:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z