Есть ли более простой способ?
Да, используйте современные java.time классы.
Видимо, вы пытаетесь сообщить момент 10:00 в тот день в UTC.Z
в вашем примере кода означает UTC, произносится «Зулу».
Для этого используйте OffsetDateTime
со смещением, заданным константой ZoneOffset.UTC
.
LocalDate ld = LocalDate.parse( "2019-05-09" ) ;
LocalTime lt = LocalTime.parse( "10:00:00" ) ;
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;
Очевидно, вы хотите отправить это значение в виде строки в стандартном формате ISO 8601 .Эти форматы по умолчанию используются в классах java.time при разборе / генерации строк.
String output = odt.toString() ;
Вы не можете точно объяснить, как и где возникает это 2-часовое расхождение.Я предполагаю, что вы видите результат после того, как была сделана настройка от UTC до некоторого часового пояса.Если это так, у вас нет проблем .
Если два человека звонят по телефону, в часовых поясах с интервалом в два часа, если они одновременно смотрят вверх, чтобы прочитать текущее время с часов на соответствующей стене, один человек увидит 10:00, а другой увидит 12:00.Тот же самый момент, та же самая точка на временной шкале, другое время настенных часов.
Это можно проверить, применив ZoneId
для предполагаемого часового пояса, чтобы увидеть значение времени настенных часов в результирующем объекте ZonedDateTime
.
ZoneId z = ZoneId.of( "Europe/Paris" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ; // Same moment, same point on the timeline, different wall-click time.