Рубрики
Без рубрики

Преобразование даты Java в OffsetDateTime

Узнайте, как преобразовать дату Java в OffsetDateTime.

Автор оригинала: baeldung.

1. введение

В этом уроке мы узнаем о разнице между Date и OffsetDateTime . Мы также учимся как переходить из одного в другое.

2. Разница между датой и временем смещения

OffsetDateTime был представлен в JDK 8 как современная альтернатива java.util.Дата .

OffsetDateTime -это потокобезопасный класс, который хранит дату и время с точностью до наносекунд. Дата , с другой стороны, не является потокобезопасной и сохраняет время с точностью до миллисекунды.

OffsetDateTime -это класс, основанный на значениях, что означает, что нам нужно использовать equals при сравнении ссылок вместо типичного ==.

Вывод метода OffsetDateTime ‘s toString находится в формате ISO-8601, в то время как Date ‘s toString находится в пользовательском нестандартном формате.

Давайте вызовем toString on обоих классов, чтобы увидеть разницу:

Date: Sat Oct 19 17:12:30 2019
OffsetDateTime: 2019-10-19T17:12:30.174Z

Дата не может хранить часовые пояса и соответствующие смещения. Единственное, что содержит объект Date , – это количество миллисекунд с 1 января 1970 года, 00:00:00 UTC, поэтому, если наше время не находится в UTC, мы должны сохранить часовой пояс в вспомогательном классе . Напротив, OffsetDateTime хранит Смещение зоны внутри.

3. Преобразование даты в OffsetDateTime

Преобразование Date в OffsetDateTime довольно просто. Если наша Дата находится в UTC, мы можем преобразовать ее с помощью одного выражения:

Date date = new Date();
OffsetDateTime offsetDateTime = date.toInstant()
  .atOffset(ZoneOffset.UTC);

Если исходная Дата не находится в UTC, мы можем предоставить смещение (сохраненное в вспомогательном объекте, потому что, как упоминалось ранее, класс Date не может хранить часовые пояса).

Допустим, наша первоначальная Дата +3:30 (по тегеранскому времени):

int hour = 3;
int minute = 30;
offsetDateTime = date.toInstant()
  .atOffset(ZoneOffset.ofHoursMinutes(hour, minute));

OffsetDateTime предоставляет множество полезных методов , которые можно использовать позже. Например, мы можем просто getDayOfWeek() , getDayOfMonth () и getDayOfYear(). Также очень легко сравнить два объекта OffsetDateTime с методами isAfter и isBefore .

Прежде всего, рекомендуется полностью избегать устаревшего класса Date .

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

В этом уроке мы узнали, как просто преобразовать Date в OffsetDateTime .

И, как всегда, код доступен на Github .