Váš formát, YYYY-mm-dd'T'HH:MM:ss'Z' není správné. Pojďme diskutovat o všem, co je na tomto formátu špatné.
- Použili jste
Ymístoy: SymbolYse používá proWeek yearzatímcoyse používá proYear. Zkontrolujte Rozdíl mezi rokem- období a týdenní rok? se o tom dozvíte více. - Použili jste
mmza měsíc: Správný symbol měsíce jeM. - Použili jste
MMna minuty: Správný symbol pro minutu jem. - Připojili jste
Zv jednoduchých uvozovkách: SymbolZse používá proTime zonezatímco'Z'není nic jiného než doslovný charakter. Pravděpodobně budete chtít naformátovat posun časového pásma+00:00jakoZa za tímto účelem byste měli ve skutečnosti použítX.
Správný formát je tedy následující:
yyyy-MM-dd'T'HH:mm:ssX
Ukázka s navrhovaným formátem:
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));
}
}
Výstup:
2021-01-14T08:13:01Z
Všimněte si, že datum-čas API java.util a jejich formátovací rozhraní API, SimpleDateFormat jsou zastaralé a náchylné k chybám. Doporučuje se úplně je přestat používat a přejít na moderní rozhraní API pro datum a čas
.
- Z jakéhokoli důvodu, pokud se musíte držet Java 6 nebo Java 7, můžete použít ThreeTen-Backport který backportuje většinu z java.time funkčnost na Java 6 a 7.
- Pokud pracujete pro projekt Android a vaše úroveň Android API stále není v souladu s Java-8, zkontrolujte Rozhraní API Java 8+ dostupná prostřednictvím odsuzování a Jak používat ThreeTenABP v projektu Android .
Použijte Date#toInstant
pro převod java.util.Date objekt (starší typ) na java.time.Instant (moderní typ). Instant představuje okamžitý bod na časové ose a měl by stačit pro většinu vašich operací JSON. Instant#toString
vrátí řetězec data a času s posunem časového pásma UTC, který je v souladu s normy ISO-8601
.
Ukázka:
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));
}
}
Výstup:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z