1. Обзор
В этом кратком руководстве мы увидим, как установить часовой пояс даты с помощью Java 7, Java 8 и библиотеки Joda-Time.
2. Использование Java 8
Java 8 представила новый API Date-Time для работы с датами и временем, который в значительной степени основан на библиотеке 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
с часовым поясом asiaSingapore
и установить время:
Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore);
nowAsiaSingapore.setTime(nowUtc);
Рекомендуется избегать API даты и времени Java 7 в пользу API даты и времени Java 8 или библиотеки Joda-Time.
4. Использование Joda-Time
Если Java 8 не подходит, мы все равно можем получить такой же результат от Joda-Time , стандарта де-факто для операций даты и времени в мире до Java 8.
Во- первых, нам нужно добавить зависимость Joda-Time к pom.xml:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10</version>
</dependency>
Чтобы представить точную точку на временной шкале, мы можем использовать Instant
из пакета org.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);
Вот как можно использовать API Joda-time для объединения информации о дате и часовом поясе.
5. Вывод
В этой статье мы узнали, как установить часовой пояс в Java с помощью Java 7, 8 и API Joda-Time. Чтобы узнать больше о поддержке даты и времени в Java 8, ознакомьтесь с нашим введением в Java 8 .
Как всегда, фрагмент кода доступен в репозитории GitHub .