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);
Мы использовали Java 8 ZonedDateTime для представления даты-времени с часовым поясом.
3. Использование Java 7
В Java 7 установка часового пояса немного сложна. Класс Date (который представляет определенный момент времени) не содержит никакой информации о часовом поясе.
Во-первых, давайте получим текущую дату UTC и Часовой пояс объект:
Date nowUtc = new Date(); TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);
В Java 7 нам нужно использовать класс Calendar для представления даты с часовым поясом.
Наконец, мы можем создать новый календарь Utc с часовым поясом asia Singapore и установить время:
Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore); nowAsiaSingapore.setTime(nowUtc);
Рекомендуется избегать Java 7 date time API в пользу Java 8 date time API или библиотеки Joda-Time.
4. Использование Joda-Time
Если Java 8 не является вариантом, мы все равно можем получить тот же результат от Joda-Time , де-факто стандарта для операций даты и времени в мире до Java 8.
Во-первых, нам нужно добавить зависимость Joda-Time к pom.xml:
joda-time joda-time 2.10
Чтобы представить точную точку на временной шкале, мы можем использовать Instant | from org.joda.time package. Внутренне класс содержит один фрагмент данных, мгновенный как миллисекунды из эпохи Java 1970-01-01T00:00:00Z:
Instant nowUtc = Instant.now();
Мы будем использовать Date TimeZone для представления часового пояса (для указанного идентификатора часового пояса):
DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");
Теперь время now Utc будет преобразовано в объект DateTime с использованием информации о часовом поясе:
DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);
Именно так Joda-time API можно использовать для объединения информации о дате и часовом поясе.
5. Заключение
В этой статье мы узнали, как установить часовой пояс в Java с помощью Java 7, 8 и Joda-Time API. Чтобы узнать больше о поддержке даты и времени Java 8, ознакомьтесь с нашим введением даты и времени Java 8 .
Как всегда, фрагмент кода доступен в репозитории GitHub .