Я использую формат часов: 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. Итак, я здесь краток. Найдите, чтобы узнать больше.