JAVA: преобразовать часы в UTC + 1 зимой и в UTC + 2 летом. - PullRequest
1 голос
/ 06 августа 2020

Я изучаю Java и пытаюсь понять, как работает система часов. Я использую часовой формат HH:mm:ss. Я хочу преобразовать эту строку в UTC + 1 час зимой и UTC + 2 летом. Чтобы узнать дату, я использую формат: yyyy/MM/dd. Ниже приведен пример типа переменной, которую я использую.

Может ли кто-нибудь помочь мне решить эту проблему?

String Hour = "14:12:13"; 
String Date = "2019:11:12";

1 Ответ

1 голос
/ 06 августа 2020

Я использую формат часов: HH: mm: ss

Это стандартный ISO 8601 формат.

java .time классы используют форматы ISO 8601 по умолчанию при синтаксическом анализе / генерации текста.

Я хочу преобразовать эту строку в UTC + 1 час зимой и UTC + 2 летом.

Java включает класс OffsetTime для представления времени суток со смещением от UT C. Но эта концепция ошибочна. И мое чтение, и мои рассуждения не могут понять время со смещением, но без даты.

Я считаю, что этот класс существует только для того, чтобы соответствовать той же идее, определенной в SQL spe c. Опять же, бессмысленно, насколько я могу судить. Не единственная бессмысленная вещь в SQL spe c.

Чтобы узнать дату, я использую формат: yyyy / MM / dd.

Для обмен данными, ведение журнала и отладка, я предлагаю вам придерживаться формата ISO 8601, то есть ГГГГ-ММ-ДД. Это похоже на ваш формат, но в качестве разделителя используется дефис, а не sla sh.

Для представления пользователю разрешите Java автоматически локализоваться с использованием методов DateTimeFormatter.ofLocalized…. Нет смысла жестко кодировать формат для ваших пользователей.

Позади, пример типа переменной, которую я использую.

Для времени суток используйте LocalTime.

Для даты используйте LocalDate.

Для смещения используйте ZoneOffset.

Для часового пояса используйте ZoneId.

На мгновение используйте комбинацию LocalDate, LocalTime и ZoneOffset, чтобы получить OffsetDateTime. Обычно лучше отключить смещение для ZoneId, чтобы получить ZonedDateTime.

"14:12:13"; String Date = "2019: 11: 12"

LocalTime lt = LocalDate.parse( "14:12:13" ) ;
LocalDate ld = LocalDate.parse( "2019-11-12" ) ; 
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;

ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;

Все это уже много-много раз освещалось в Stack Overflow. Итак, я здесь краток. Найдите, чтобы узнать больше.

...