tl; dr
Вместо того, чтобы думать в терминах одного сложного шаблона форматирования для синтаксического анализа, подумайте в терминах объединения частей.
Здесь мы получаем текущий момент, как показано в UT C. Затем мы переходим к желаемому времени суток.
OffsetDateTime.now( ZoneOffset.UTC ).with( LocalTime.parse( "13:35:23" ) ).toInstant().toString()
Подробности
LocalTime
Анализируйте ваш ввод соответствующим образом.
LocalTime lt = LocalTime.parse( "13:35:23" ) ;
ZonedDateTime
Затем объедините с датой и часовым поясом, чтобы определить момент.
В любой данный момент дата меняется по всему земному шару в зависимости от часового пояса. Таким образом, здесь решающее значение имеет часовой пояс.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate ld = LocalDate.now( z ) ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
Instant
Настройте на UT C, смещение нуля часов-минут-секунд, извлекая Instant
.
Instant instant = zdt.toInstant() ;
Сгенерируйте строковый вывод в стандартном формате ISO 8691.
String output = instant.toString() ;
OffsetDateTime
Если вы хотите, чтобы были видны дата и введенное время для UT C, а не для другого часового пояса, используйте константу ZoneOffset.UTC
. Используйте OffsetDateTime
вместо ZonedDateTime
. Используйте with
, чтобы использовать альтернативную часть, например, здесь, где мы заменяем текущую часть времени дня введенным временем дня.
OffsetDateTime // Represent a moment as date,time, and offset -from-UTC (a number of hours-minutes-seconds).
.now( ZoneOffset.UTC ) // Capture current moment as seen in UTC.
.with(
LocalTime.parse( "13:35:23" )
)
.toInstant() // Extract the more basic `Instant` object, always in UTC by definition.
.toString() // Generate text representing the value of this date-time object. Use standard ISO 8601 format.
введите описание изображения здесь