Установите часовой пояс даты в Java

Установите часовой пояс даты в Java

1. обзор

В этом кратком руководстве мы увидим, как установить часовой пояс даты с помощью Java 7, Java 8 и библиотеки Joda-Time.

2. Использование Java 8

В Java 8 появилсяa new Date-Time API для работы с датой и временем, который в значительной степени основан на библиотеке Joda-Time.

КлассInstant из Java Date Time API моделирует единственную мгновенную точку на временной шкале в формате UTC. Это представляет количество наносекунд с момента первого момента 1970 UTC.

Сначала мы получим текущийInstant по системным часам иZoneId для имени часового пояса:

Instant nowUtc = Instant.now();
ZoneId asiaSingapore = ZoneId.of("Asia/Singapore");

Наконец,ZoneId иInstant можно использовать для создания объекта даты и времени с деталями часового пояса. КлассZonedDateTime представляет дату и время с часовым поясом в календарной системе ISO-8601:

ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore);

Мы использовалиZonedDateTime в Java 8 для представления даты и времени с часовым поясом.

3. Использование Java 7

В Java 7 установка часового пояса немного сложна. КлассDate (который представляет определенный момент времени) не содержит информации о часовом поясе.

Во-первых, давайте получим текущую дату в формате UTC и объектTimeZone:

Date nowUtc = new Date();
TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);

В Java 7 нам нужно использовать классCalendar для представления даты с часовым поясом.

Наконец, мы можем создатьnowUtc Calendar сasiaSingapore TimeZone и установить время:

Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore);
nowAsiaSingapore.setTime(nowUtc);

Рекомендуется избегать использования API даты и времени Java 7 в пользу API даты и времени Java 8 или библиотеки Joda-Time.

4. Использование Joda-Time

Если Java 8 не подходит,we can still get the same kind of result from Joda-Time, фактический стандарт для операций с датой и временем в мире до Java 8.

Сначала нам нужно добавитьJoda-Time dependency кpom.xml:


  joda-time
  joda-time
  2.10

Чтобы представить точную точку на временной шкале, мы можем использоватьInstant fromorg.joda.time пакет. Внутри класс хранит один фрагмент данных, мгновенный в миллисекундах с эпохи Java 1970-01-01T00: 00: 00Z:

Instant nowUtc = Instant.now();

Мы будем использоватьDateTimeZone для представления часового пояса (для указанного идентификатора часового пояса):

DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");

Теперь времяnowUtc будет преобразовано в объектDateTime с использованием информации о часовом поясе:

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

Вот как Joda-time API можно использовать для объединения информации о дате и часовом поясе.

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

В этой статье мы узнали, как установить часовой пояс в Java, используя Java 7, 8 и Joda-Time API. Чтобы узнать больше о поддержке даты и времени в Java 8, посетитеour Java 8 date-time intro.

Как всегда, фрагмент кода доступен вGitHub repository.