Работа с часовыми поясами
Часть раздела Логика и управление потоком путешествия по Java на Coddy — урок 59 из 59.
ZonedDateTime в Java представляет дату и время с часовым поясом. Это полезно при работе с разными часовыми поясами или преобразовании между ними.
Создайте время в конкретной временной зоне:
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));Вы также можете преобразовать LocalDateTime в ZonedDateTime с помощью .atZone():
LocalDateTime local = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = local.atZone(ZoneId.of("Asia/Tokyo"));.atZone() прикрепляет часовой пояс к существующему локальному дата-времени, создавая ZonedDateTime.
Преобразование времени между зонами:
ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));После выполнения приведенного выше кода, newYork содержит тот же самый момент времени, что и tokyo, но в часовом поясе Нью-Йорка:
2024-03-15T10:30-04:00[America/New_York]
// Example outputДля форматирования ZonedDateTime используйте DateTimeFormatter. Буква шаблона Z или xxx форматирует смещение UTC (напр. +09:00), а VV форматирует идентификатор зоны (напр. Asia/Tokyo):
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = tokyo.format(formatter);
// Example: 2024-03-15 10:30 +09:00Задание
ЛегкоСоздайте метод с именем convertTime, который принимает четыре аргумента:
- Строку (
dateTimeStr) в формате "yyyy-MM-dd HH:mm" - Строку (
sourceZone) — идентификатор исходной часовой зоны - Строку (
targetZone) — идентификатор целевой часовой зоны - Логическое значение (
showOffset) — включать ли смещение часовой зоны в вывод
Метод должен:
- Разобрать входное время даты в исходной часовой зоне
- Преобразовать его в целевую часовую зону
- Вернуть отформатированную информацию о обоих временах
Сообщения возврата должны быть:
- Если неверное время даты: вернуть "Invalid datetime format"
- Если неверная зона: вернуть "Invalid time zone"
- Если showOffset равно true: включить смещение в вывод
- Формат: "Source: [time1], Target: [time2]"
Шпаргалка
ZonedDateTime представляет дату и время с часовым поясом, полезно для работы с разными часовыми поясами.
Создайте время в конкретном часовом поясе:
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));Преобразуйте LocalDateTime в ZonedDateTime с помощью .atZone():
LocalDateTime local = LocalDateTime.now();
ZonedDateTime zoned = local.atZone(ZoneId.of("Asia/Tokyo"));Преобразование времени между поясами:
ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));Форматируйте ZonedDateTime, включая смещение UTC, с помощью шаблонов Z или xxx:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = zoned.format(formatter);
// Example: 2024-03-15 10:30 +09:00Попробуйте сами
import java.util.Scanner;
import java.time.*;
import java.time.format.*;
public class Main {
public static String convertTime(String dateTimeStr, String sourceZone,
String targetZone, boolean showOffset) {
// Напишите свой код здесь
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String dateTimeStr = scanner.nextLine();
String sourceZone = scanner.nextLine();
String targetZone = scanner.nextLine();
boolean showOffset = Boolean.parseBoolean(scanner.nextLine());
System.out.println(convertTime(dateTimeStr, sourceZone, targetZone, showOffset));
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиПовторение - 2D-массивыСложение и вычитание матрицРваные массивы3D-массивы и вышеРаспространённые паттерны 2D-массивовПовторение - всё о массивах4HashSet Часть 1
Что такое HashSet?Добавление элементаУдаление элементаПроверка наличия элементаПустота и размерОчистка и клонированиеПовторение - HashSet10Даты и время
Основы LocalDateОперации с LocalTimeИспользование LocalDateTimePeriod и DurationФорматирование датРабота с часовыми поясами2HashMap Часть 1
Что такое HashMap?Объявление HashMapДоступ к значениямПроверка существования ключаИзменение словарейИтоги - HashMap3HashMap. Часть 2
Методы HashMapИтерация с keySet()Итерация с entrySet()Вложенный HashMapПовторение - Управление складомПовторение - Операции HashMap6Продвинутое управление потоком
Операторы метокВыражение switchСопоставление шаблоновОхранные клаузыИтоги - управление потоком9Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка слов