На основе DateTimeFormatter :
Смещение X и x: Форматирует смещение на основе количества букв шаблона.
-Однобуква выводит только час, например, «+01», если только минута не равна нулю; в этом случае также выводится минута, например, «+0130».
-Два буквы выводят часы и минуты бездвоеточие, такое как «+0130».
- три буквы выводят часы и минуты с двоеточием, например «+01: 30».
- четыре буквы выводят часы и минуты и необязательную секунду, бездвоеточие, например «+013015».
-Пять букв выводит час и минуту и необязательную секунду, с двоеточием, например «+01: 30: 15».
-Шесть или более букв выдает исключение IllegalArgumentException,Буква шаблона «X» (верхний регистр) будет выводить «Z», когда выводимое смещение будет равно нулю, а буква шаблона «x» (нижний регистр) будет выводить «+00», «+0000» или «+00». : 00 '.
Смещение Z: Форматирует смещение на основе количества букв шаблона.
- Одна, две или три буквы выводят час и минуту без двоеточия, например, «+0130». Вывод будет равен «+0000», когда смещение равно нулю.
- Четыре буквы выводят полную форму локализованного смещения, эквивалентного четырем буквам Offset-O. Выводом будет соответствующий локализованный текст смещения, если смещение равно нулю.
- Пять букв выводят час, минуту, с необязательной секундой, если не ноль, с двоеточием. Он выводит 'Z', если смещение равно нулю.
- Шесть или более букв выбрасывает IllegalArgumentException.
Код:
public static void printDate(Temporal t, String format) {
System.out.println(DateTimeFormatter.ofPattern(format).format(t));
}
public static void testJavaTime() {
ZonedDateTime zdt = ZonedDateTime.now();
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZ"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZ"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZZ"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZZZ"); //2019-10-14 08:15:53.115GMT+02:00
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZZZZ"); //2019-10-14 08:15:53.115+02:00
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSX"); //2019-10-14 08:15:53.115+02
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXX"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXXX"); //2019-10-14 08:15:53.115+02:00
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXXXX"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXXXXX"); //2019-10-14 08:15:53.115+02:00
}
На основе SimpleDateFormat
, это простой вопрос возможного формата:
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
Независимо от суммы Z
, он всегда будет использовать формат [-+]####
Но с X
это отличается.
X
: [-+]##
XX
: [-+]####
XXX
: [-+]##:##
Теперь давайте продемонстрируем это:
public static void printDate(Date d, String format){
System.out.println(new SimpleDateFormat(format).format(d));
}
public static void testJavaDate() {
Date d = new Date();
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSZ"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSZZ"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSZZZ"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSX"); //2019-10-14 07:52:10.308+02
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSXX"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSXXX"); //2019-10-14 07:52:10.308+02:00
}