Вашият формат, 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