Вашият формат, YYYY-mm-dd'T'HH:MM:ss'Z' не е правилно. Нека обсъдим всичко, което не е наред с този формат.
- Използвали сте
Yвместоy: СимволътYсе използва заWeek yearдокатоyсе използва заYear. Проверете Разлика между година на- ера и базирана на седмица година? за да научите повече за него. - Използвали сте
mmза месец: Правилният символ за месеца еM. - Използвали сте
MMза минути: Правилният символ за минутата еm. - Приложили сте
Zв единични кавички: СимволътZсе използва заTime zoneдокато'Z'не е нищо друго освен буквален знак. Вероятно искате да форматирате отместването на часовата зона на+00:00катоZи за това всъщност трябва да използватеX.
И така, правилният формат е както следва:
yyyy-MM-dd'T'HH:mm:ssX
Демо с предложения формат:
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));
}
}
Изход:
2021-01-14T08:13:01Z
Имайте предвид, че API за дата-час на java.util и техния API за форматиране, SimpleDateFormat са остарели и податливи на грешки. Препоръчително е да спрете да ги използвате напълно и да преминете към модерен API за дата-час
.
- По някаква причина, ако трябва да се придържате към Java 6 или Java 7, можете да използвате ThreeTen-Backport който поддържа по-голямата част от java.time функционалност към Java 6 и 7.
- Ако работите за проект за Android и вашето ниво на API за Android все още не е съвместимо с Java-8, проверете API на Java 8+, достъпни чрез отстраняване на захар и Как да използвате ThreeTenABP в Android Project .
Използвайте Date#toInstant
за конвертиране на java.util.Date обект (наследеният тип) към java.time.Instant (модерен тип). Instant представлява моментна точка от времевата линия и трябва да е достатъчна за повечето от вашите JSON операции. Instant#toString
връща низа за дата-час с отместване на часовата зона UTC, което е съвместимо с стандартите ISO-8601
.
Демо:
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));
}
}
Изход:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z