Форматирайте ZonedDateTime в низ

1. Общ преглед

В този бърз урок ще видим как да конвертираме ZonedDateTime в низ.

Също така ще разгледаме как да анализираме ZonedDateTime от низ.

2. Създаване на ZonedDateTime

Първо, ще започнем с ZonedDateTime с часова зона UTC. Има няколко начина да постигнем това.

Можем да посочим годината, месеца, деня и т.н.:

ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));

Също така можем да създадем ZonedDateTime от текущата дата и час:

ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));

Или можем да създадем ZonedDateTime от съществуващ LocalDateTime :

LocalDateTime localDateTime = LocalDateTime.now(); ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));

3. ZonedDateTime към String

Сега, нека преобразуваме нашето ZonedDateTime в низ. За целта ще използваме класа DateTimeFormatter .

Има няколко специални форматиращи устройства, които можем да използваме за показване на данни от часовата зона. Пълният списък на форматиращите можете да намерите тук, но ще разгледаме няколко от най-често срещаните.

Ако искаме да покажем изместване на часовата зона, можем да използваме форматиращото устройство „Z“ или „X“ :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z"); String formattedString = zonedDateTime.format(formatter);

Това ще ни даде резултат като този:

02/01/2018 - 13:45:30 +0000

За да включим името на часовата зона, можем да използваме малки букви „z“:

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z"); String formattedString2 = zonedDateTime.format(formatter2);

Резултатът от това ще бъде:

02/01/2018 - 13:45:30 UTC

4. Низ до ZonedDateTime

Този процес може да работи и обратно. Можем да вземем низ и да го преобразуваме обратно в ZonedDateTime .

Една от опциите да направите това е да използвате метода static parse () на класа ZonedDateTime :

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");

Този метод използва ISO_ZONED_DATE_TIME форматиращ инструмент. Има и претоварена версия на метода, която приема параметър DateTimeFormatter . Низът обаче трябва да съдържа идентификатор на зона или ще получим изключение:

assertThrows(DateTimeParseException.class, () -> ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME));

Втора опция за получаване на ZonedDateTime от String включва 2 стъпки: преобразуване на String в LocalDateTime, след това този обект в ZonedDateTime:

ZoneId timeZone = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = LocalDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME).atZone(timeZone); log.info(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));

Този косвен метод просто комбинира датата-час с идентификатор на зона:

INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]

За да научите повече за анализирането на String на дати, разгледайте нашата по-задълбочена статия за анализиране на дати.

5. Заключение

В тази статия видяхме как да създадем ZonedDateTime и как да го форматираме като низ.

Също така разгледахме набързо как да анализираме низа на датата и да конвертираме в ZonedDateTime .

Изходният код за този урок е достъпен в Github.