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
Y
místoy
: SymbolY
se používá proWeek year
zatímcoy
se používá proYear
. Zkontrolujte Rozdíl mezi rokem- období a týdenní rok? se o tom dozvíte více. - Použili jste
mm
za měsíc: Správný symbol měsíce jeM
. - Použili jste
MM
na minuty: Správný symbol pro minutu jem
. - Připojili jste
Z
v jednoduchých uvozovkách: SymbolZ
se používá proTime zone
zatímco'Z'
není nic jiného než doslovný charakter. Pravděpodobně budete chtít naformátovat posun časového pásma+00:00
jakoZ
a 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