Scala - Как конвертировать LocalDateTime в ZonedDateTime, отформатированный без постфикса GMT? - PullRequest
1 голос
/ 29 октября 2019

Я хотел получить LocalDateTime в GMT, поэтому обернул его ZonedDateTime.

Но gmtZoneTime возвращается в следующем формате: 2019-10-29T00:00Z[GMT] Хотя мне нужно, чтобы оно было: 2019-10-29T00:00:00.000+0000

Как мне правильно преобразовать localDateTime в GMT ZonedDateTime?

val currentDate:LocalDate = java.time.LocalDate.now
val localDateTime: LocalDateTime = currentDate.atStartOfDay
val gmtZoneTime: ZonedDateTime = localDateTime.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("GMT"))

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Вам необходимо отформатировать ZonedDateTime.

Первый подход - использовать предопределенный форматер, например: java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME, однако для GMT вместо «+0000» отображается «Z» (по умолчанию)поведение, другие смещения отображаются как «+0100» и т. д.)

Таким образом, второе - создать собственный форматтер, например: java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")

, а затем использовать его для форматирования ZonedDateTime как gmtZoneTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")) так что вы получите результат как:

2019-10-28T23:00:00+0000
1 голос
/ 30 октября 2019

Сначала ваш код неверен. Когда я запускал его в моем часовом поясе (Европа / Копенгаген) только сейчас, я получил

2019-10-29T23: 00Z [GMT]

Не знаюдумаю, что вы запланировали 23:00 по Гринвичу.

Во-вторых, вы можете думать о GMT или UTC как о смещении (нуля от UTC), поэтому правильнее использовать OffsetDateTIme, чем ZonedDateTime длявремя. Это также устраняет ваш нежелательный суффикс. В Java (это все, что я могу написать):

    LocalDate currentDate = LocalDate.now(ZoneOffset.UTC);
    OffsetDateTime gmtZoneTime = currentDate.atStartOfDay(ZoneOffset.UTC)
            .toOffsetDateTime();
    System.out.println(gmtZoneTime);

Вывод при запуске только сейчас:

2019-10-30T00: 00Z

Редактировать: Вы можете смело считать UTC и GMT синонимами, поскольку java.time делает это (хотя, строго говоря, они могут различаться с точностью до секунды).

Я предположил, что вы также хотели указать дату в UTC, поэтому прошлоэто как аргумент LocalDate.now(). Если вы хотите, чтобы дата была в другом часовом поясе, передайте этот часовой пояс на LocalDate.now(), чтобы из кода было понятно, что вы получаете.

Если вам нужен этот конкретный формат в вашем вопросе, pezetem веренв другом ответе, который вам нужно отформатировать в строку:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSxx");
    String formattedGmtTime = gmtZoneTime.format(formatter);
    System.out.println(formattedGmtTime);

2019-10-30T00: 00: 00.000 + 0000

Это кажется мне многословным, хотя. По крайней мере, я бы пропустил миллисекунды, так как мы знаем, что они равны 0, вероятно, тоже секундыСказал, не зная вашего точного бизнес-кейса.

Ссылка: Разница между UTC и GMT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...