Ваш вопрос не имеет смысла.
Вы должны понимать, что LocalDateTime
содержит только дату и время суток. Класс преднамеренно лишен какой-либо концепции часового пояса или смещения от UT C. Так что LocalDateTime
не не представляет момент. Имя может вводить в заблуждение, так как LocalDateTime
означает , а не для какой-либо конкретной местности.
Если вы хотите отслеживать момент в UT C, используйте Instant
.
Instant instant = Instant.now() ; // Capture the current moment in UTC. Always in UTC, by definition.
Если вы хотите отследить момент, который виден на часах настенного времени, используемых людьми определенного региона (часового пояса), используйте ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montevideo" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
LocalDateTime преобразование UT C date
Вы подразумеваете, что имеете в виду конкретную дату и время, которые видны на простом меридиане? Или, как видно из Исландия , который использует UT C в качестве часового пояса?
LocalDate ld = LocalDate.of( 2020 , Month.JANUARY , 23 ) ;
LocalTime lt = LocalTime.of( 15 , 0 ) ; // 3 PM.
LocalDateTime ldt = LocalDateTime.of( ld , lt ) ;
Этот ldt
объект означает «3 часа дня 23-го числа». Январь этого года " где-то или где-нибудь . Но этот LocalDateTime
объект делает не 3 PM в одном конкретном месте . Мы понятия не имеем, будет ли здесь 15:00 в Токио, Япония или 15:00 в Тулузе, Франция или 15:00 в Толедо, Огайо, США. Это были бы три разных момента с интервалом в несколько часов. LocalDateTime
представляет ни одного из них или всех из них, в зависимости от того, как вы хотите их видеть, но не какой-либо из них.
Чтобы определить момент от даты и времени суток, вам нужен контекст часового пояса или смещение от UT C. Другими словами, третья часть информации, в дополнение к дате и времени суток, нам нужна "как видно из Парижа, Франция" или "как видно из Станция Палмера в Антарктиде". С таким контекстом мы получаем либо ZonedDateTime
или OffsetDateTime
, соответственно.
ZoneId z = ZoneId.of( "Antarctica/Palmer" ) ;
ZonedDateTime zdt = ZonedDateTime.of( ldt , z ) ; // Giving context of time zone to the date-with-time `LocalDateTime` object. Determines a moment.
Чтобы увидеть тот же момент в UT C (смещение нуля часов-минут-секунд), извлеките Instant
.
Instant instant = zdt.toInstant() ; // Adjust from time zone to UTC.
Часовой пояс и смещение от UT C
Учитывая -3 часовой пояс:
Нет , -3
- это не часовой пояс, это смещение.
-3
- это сокращение от -03:00
. С практической точки зрения, я рекомендую вам не сокращать смещение, так как некоторые библиотеки ожидают полных часов с минутами, включая символ двоеточия и включая ведущий ноль в сингле-ди git часах или минутах.
The -3
или -03:00
означает просто «три часа позади UT C».
Часовой пояс гораздо больше. Часовой пояс - это история прошлых, настоящих и будущих изменений в смещении, используемом людьми определенного региона. Часовой пояс имеет название в виде Continent/Region
, например Africa/Tunis
или Europe/Paris
.
См. список часовых поясов в Википедии. Сортировать по смещенному столбцу. Обратите внимание, что сегодня около трех дюжин часовых поясов делят смещение -03:00
, например America/Montevideo
, Atlantic/Stanley
и Antarctica/Palmer
.
Всегда предпочитайте часовой пояс простому смещению. При выполнении математики даты и времени и сложении / вычитании промежутков времени результаты могут отличаться в зависимости от часового пояса. Часовые пояса могут использовать другие смещения, отличные от -03:00
в другие даты в прошлом и будущем.