Я бы не стал использовать LocalDateTime
вообще.Используйте ZonedDateTime
для устранения любых сомнений по поводу времени.Также всегда передавайте ZoneId
(если не Clock
) методу now
.Это делает ваш код независимым от настроек часового пояса компьютера и JVM.
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Istanbul"));
System.out.println(zonedDateTime);
2019-07-09T14: 14: 17.280852 + 03: 00 [Азия / Стамбул]
Возможно, вы неправильно поняли часть +03:00
, которую иногда делают люди.Это означает, что показанное время уже на 3 часа больше UTC.Таким образом, показанный момент времени равен 11:14:17 UTC.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(zonedDateTime.format(formatter));
2019-07-09 14: 14: 17
Ваш форматер делаетне включать часовой пояс, поэтому он не отображается.Но это время в Стамбуле.
Что пошло не так в вашем коде?
Я предполагаю, что комментарии в вашем коде выполняются на вашем сервере в UTC (это не совсем ясно) ичто вы ввели код около 10:30 UTC, так же, как 13:30 в Стамбуле.
A LocalDateTime
- это дата и время без часового пояса и без смещения UTC.Его метод no-arg now
использует настройку часового пояса JVM, в данном случае UTC, поэтому дает 10:30 в соответствующий день.Я думаю, что ZonedDateTime.of
здесь не так: он берет 10:30 из LocalDateTime
и стамбульского часового пояса от объекта ZoneId
и дает вам 10:30 в Стамбуле, а это не то, что вы хотели.Вы хотели 13:30, АКА 13:30.