Как отформатировать ZonedDateTime в строку?

Я хочу преобразовать ZonedDateTime в String в формате ("dd/MM/yyyy - hh:mm"). Я знаю, что это возможно в других типах Joda-Time, просто используя их toString("dd/MM/yyyy - hh:mm").... Но это не работает с ZonedDateTime.toString().

Как отформатировать ZonedDateTime в String?


РЕДАКТИРОВАТЬ:

Я попытался напечатать время в другом часовом поясе, и результат всегда один и тот же:

ZonedDateTime date = ZonedDateTime.now();
ZoneId la = ZoneId.of("America/Los_Angeles");
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la);

// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date));
// same result as the previous one
// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date2));

И я не в том же часовом поясе, что и Лос-Анджелес.


РЕДАКТИРОВАТЬ 2:

Нашел как изменить часовой пояс:

// Change this:
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la); // incorrect!
// To this:
ZonedDateTime date2 = date.withZoneSameInstant(la);

person Michel Feinstein    schedule 23.02.2017    source источник
comment
Вы используете jdk8 java.time.ZonedDateTime?   -  person reos    schedule 23.02.2017
comment
Да, я так думаю...   -  person Michel Feinstein    schedule 23.02.2017
comment
Использовать метод format() из типа ZonedDateTime   -  person bart.s    schedule 23.02.2017
comment
Использование символа h (строчная буква) является серьезной ошибкой. Либо используйте его в сочетании с am/pm, потому что это 12-часовое поле, либо используйте символ H (заглавная буква) для 24-часового поля.   -  person Meno Hochschild    schedule 24.02.2017


Ответы (2)


Вы можете использовать java.time.format.DateTimeFormatter. https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

Вот пример

ZonedDateTime date = ZonedDateTime.now();

System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date));
person reos    schedule 23.02.2017
comment
Спасибо! это работает!... теперь мне просто нужно понять, как перейти от одного часового пояса к другому и соответственно распечатать его... - person Michel Feinstein; 23.02.2017
comment
Не стесняйтесь задать другой вопрос - person reos; 23.02.2017
comment
Это только мое впечатление, но это всегда будет печатать ZonedDateTime, игнорируя определенный часовой пояс? - person Michel Feinstein; 23.02.2017
comment
Неважно, я обнаружил, что мне нужно использовать ZonedDateTime.withZoneSameInstant()... Спасибо! - person Michel Feinstein; 24.02.2017

Большое спасибо за выше. Здесь это в scala, где localDateTime.now всегда время Zulu/UTC.

import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
import java.time.ZoneId

val ny = ZoneId.of("America/New_York")
val utc = ZoneId.of("UTC")
val dateTime = LocalDateTime.now.atZone(utc)

val nyTime = DateTimeFormatter.
      ofPattern("yyyy-MMM-dd HH:mm z").
      format(dateTime.withZoneSameInstant(ny))
person Tony Fraser    schedule 07.02.2019