Научитесь преобразовывать строку в экземпляры классов даты и времени, например, классы ZonedDateTime или OffsetDateTime, используя класс DateTimeFormatter в Java.
1. Классы Instant, OffsetDateTime и ZonedDateTime
В Java 8 OffsetDateTime и ZonedDateTime — оба хранят момент на универсальной шкале времени с точностью до наносекунды.
- OffsetDateTime добавляет к моменту смещение от UTC, что позволяет получить локальную дату-время. Мы можем использовать OffsetDateTime при более детальном моделировании концепций даты-времени или при общении с базой данных или в сетевом протоколе.
- ZonedDateTime использует полные правила часового пояса при обработке дат. Мы можем использовать ZonedDateTime для отображения времени в пользовательском интерфейсе. Он учитывает правила DST(летнего времени). Помните, что смещение зоны может измениться для идентификатора зоны во время изменений DST.
2. Анализ строки в OffsetDateTime в формате UTC
Дата и время со смещением представлены в любом шаблоне. Например, если мы используем шаблон «03/08/2019T16:20:17:717+05:30», то эта временная метка представляет один момент со смещением «+05:30».
Ниже приведена программа Java для преобразования строки в OffsetDateTime и получения эквивалентного момента в UTC. Она использует функцию withOffsetSameInstant(ZoneOffset.UTC) для преобразования заданного момента в момент UTC.
'Z' в строке представляет часовой пояс UTC. Это краткая форма от Zulu, которую можно записать как UTC +0:00.
импорт java.time.OffsetDateTime;импорт java.time.ZoneOffset;импорт java.time.format.DateTimeFormatter;публичный класс Main {public static void main(String[] args) выдает исключение{Форматировщик даты и времени DATE_TIME_FORMATTER = Форматировщик даты и времени.ofPattern("dd/MM/uuuu'T'HH:mm:ss:SSSSXXXXXXX");//Строка даты с информацией о смещенииСтрока dateString = "03/08/2019T16:20:17:717+05:30";//Экземпляр с заданным смещениемOffsetDateTime odtInstanceAtOffset = OffsetDateTime.parse(dateString, DATE_TIME_FORMATTER);//Экземпляр в UTCOffsetDateTime odtInstanceAtUTC = odtInstanceAtOffset.withOffsetSameInstant(ZoneOffset.UTC);//Форматирование в строкуСтрока dateStringInUTC = odtInstanceAtUTC.format(DATE_TIME_FORMATTER);System.out.println(odtInstanceAtOffset);System.out.println(odtInstanceAtUTC);System.out.println(dateStringInUTC);//Преобразуем OffsetDateTime в момент времени в формате UTCSystem.out.println(odtInstanceAtOffset.toInstant());}}
Вывод программы.
2019-08-03T16:20:17.717+05:302019-08-03T10:50:17.717Z03/08/2019T10:50:17:717Z2019-08-03T10:50:17.717Z
3. Анализ строки в ZonedDateTime в формате UTC
Дата и время с полной информацией о зоне могут быть представлены в следующих форматах.
- шаблон dd/MM/uuuu'T'HH:mm:ss:SSSSXXXXXXX. например, «03/08/2019T16:20:17:717+05:30».
- MM/dd/yyyy'T'HH:mm:ss:SSS z шаблон. например, «08/03/2019T16:20:17:717 UTC+05:30».
В этом примере временная метка представляет собой один момент со смещением «+05:30», т.е. IST.
Ниже приведена программа Java для преобразования строки в ZonedDateTime и получения эквивалентного момента в UTC. Она использует метод withZoneSameInstant(ZoneOffset.UTC) для получения идентификатора момента в зоне UTC.
импорт java.time.ZoneOffset;импорт java.time.ZonedDateTime;импорт java.time.format.DateTimeFormatter;публичный класс Main {public static void main(String[] args) выдает исключение{Форматировщик даты и времени DATE_TIME_FORMATTER = Форматировщик даты и времени.ofPattern("MM/dd/yyyy'T'HH:mm:ss:SSS z");//Строка даты с информацией о зонеСтрока dateString = "08/03/2019T16:20:17:717 UTC+05:30";//Экземпляр с заданной зонойZonedDateTime zdtInstanceAtOffset = ZonedDateTime.parse(dateString, DATE_TIME_FORMATTER);//Экземпляр в UTCZonedDateTime zdtInstanceAtUTC = zdtInstanceAtOffset.withZoneSameInstant(ZoneOffset.UTC);//Форматирование в строкуСтрока dateStringInUTC = zdtInstanceAtUTC.format(DATE_TIME_FORMATTER);System.out.println(zdtInstanceAtOffset);System.out.println(zdtInstanceAtUTC);System.out.println(dateStringInUTC);//Преобразуем ZonedDateTime в момент времени в формате UTCSystem.out.println(zdtInstanceAtOffset.toInstant());}}
Вывод программы.
2019-08-03T16:20:17.717+05:30[UTC+05:30]2019-08-03T10:50:17.717Z08/03/2019T10:50:17:717 Z2019-08-03T10:50:17.717Z