Похоже, вы используете java.time
API с ZonedDateTime. Вероятно, вам следует использовать его вместо LocalDateTime
, так как у LocalDateTime
нет часового пояса. Из документов:
Дата без часового пояса в календарной системе ISO-8601, например 2007-12-03.
Этот класс не хранит и не представляет время или часовой пояс. Вместо этого это описание даты, используемой для дней рождения. Он не может представлять мгновение на временной шкале без дополнительной информации, такой как смещение или часовой пояс.
А затем ZonedDateTime
docs утверждает, что:
Дата-время с часовым поясом в календарной системе ISO-8601, например 2007-12-03T10:15:30+01:00 Европа/Париж.
Этот класс обрабатывает преобразование из локальной временной шкалы LocalDateTime в мгновенную временную шкалу Instant. Разница между двумя временными шкалами — это смещение от UTC/Greenwich, представленное ZoneOffset.
Используя ZonedDateTime
, ваш код будет выглядеть так:
import java.time._
import java.time.format._
val zoneId = ZoneId.of("America/Los_Angeles")
val formatter = DateTimeFormatter.ofPattern("y-M-d H:m:s").withZone(zoneId)
val zdt = ZonedDateTime.parse("2011-01-11 01:51:10", formatter)
Результат, который вы увидите в консоли, будет таким:
zdt: java.time.ZonedDateTime = 2011-01-11T01:51:10-08:00[America/Los_Angeles]
Это происходит потому, что вы используете по умолчанию toString метод ZonedDateTime
и выглядит как DateTimeFormatter.ISO_OFFSET_DATE_TIME
- это именно то, что вам нужно. Итак, ваш код должен быть:
import java.time._
import java.time.format._
val zoneId = ZoneId.of("America/Los_Angeles")
val formatter = DateTimeFormatter.ofPattern("y-M-d H:m:s").withZone(zoneId)
val zdt = ZonedDateTime.parse("2011-01-11 01:51:10", formatter)
val formatted: String = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
person
marcospereira
schedule
28.02.2016
LocalDateTime
не имеет понятия часового пояса. - person Tunaki   schedule 29.02.20168 hours
, применив смещение - person daydreamer   schedule 29.02.2016ZonedDateTime
, который является местным временем и часовым поясом, который вы указали. (1:51:10 по тихоокеанскому времени), оттуда ничего с ним не сделаешь. Вы, вероятно, хотите.toInstant()
или.withZoneSameInstant(someOtherZone)
. - person Matt Johnson-Pint   schedule 29.02.2016