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ś
Yzamiasty: SymbolYjest używany dlaWeek yearpodczas gdyyjest 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ś
mmna miesiąc: Prawidłowy symbol miesiąca toM. - Użyłeś
MMprzez minuty: Prawidłowy symbol minuty tom. - Załączyłeś
Zw pojedynczych cudzysłowach: SymbolZjest używany dlaTime zonepodczas gdy'Z'to nic innego jak literał znakowy. Prawdopodobnie chcesz sformatować przesunięcie strefy czasowej na+00:00jakoZi 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