Joda: разобрать строку как DateTime со странным форматом часового пояса - PullRequest
0 голосов
/ 13 сентября 2018

Есть ли действительные joda DateTimeFormat для строк даты, таких как:

Пн, 23 июля 2018 07:08:26 +0300 GMT

Iпробовал:

DateTimeFormatter FMT1 = DateTimeFormat.forPattern("E, d MMM yyyy HH:mm:ss Z");
DateTimeFormatter FMT2 = DateTimeFormat.forPattern("E, d MMM yyyy HH:mm:ss z");
DateTimeFormatter FMT3 = DateTimeFormat.forPattern("E, d MMM yyyy HH:mm:ss z Z");

но ничего из этого не работает.Я посмотрел здесь https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html, и я не могу найти способ разобрать эту дату, не меняя сначала строку.Есть ли способ?

1 Ответ

0 голосов
/ 13 сентября 2018

Я так понимаю, что +0300 является истинным смещением, а GMT как раз там, чтобы сказать, что +0300 относительно GMT. Joda-Time поддерживает апострофы для разделения постоянного текста, который не должен интерпретироваться:

    DateTimeFormatter formatter = DateTimeFormat.forPattern("E, d MMM yyyy HH:mm:ss Z 'GMT'");

    DateTime dt = DateTime.parse("Mon, 23 Jul 2018 07:08:26 +0300 GMT", formatter);
    System.out.println(dt);

Вывод на мой компьютер в Европе / часовой пояс Копенгагена:

2018-07-23T06: 08: 26,000 + 02: 00

Кроме того, идея использования строчных и прописных букв z была не слишком плохой. Это работает, если вы поставите их в обратном порядке:

    DateTimeFormatter formatter = DateTimeFormat.forPattern("E, d MMM yyyy HH:mm:ss Z z");

2018-07-23T04: 08: 26.000Z

Я предпочитаю апострофы, хотя. Читателю трудно понять, чего ожидать от Z z.

...