Разбивка часового пояса по времени в Йоде с регионом / городом - PullRequest
3 голосов
/ 07 августа 2011
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        System.out.println(
                DateTimeZone.forID("Europe/Copenhagen")
        );

        DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm dd MM YY Z");
        System.out.println(
                formatter.parseDateTime("19:30 29 8 11 Europe/Copenhagen")
        );
    }
}

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

Europe/Copenhagen
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "19:30 29 8 11 Europe/Copenhagen" is malformed at "Europe/Copenhagen"
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683)
    at Main.main(Main.java:13)

Почему?

Ответы [ 3 ]

3 голосов
/ 08 августа 2011

Глядя на JodaTime DateTimeFormat javadocs для DateTimeFormat, вы должны использовать ZZZ, а не Z.

Его легко пропустить, поскольку таблица в этом документе показывает только Z.Немного ниже на странице: «Зона:« Z »выводит смещение без двоеточия,« ZZ »выводит смещение с двоеточием,« ZZZ »или более выводит идентификатор зоны."

2 голосов
/ 08 августа 2011

Разбор идентификаторов часовых поясов, таких как Европа / Копенгаген, был добавлен только в Joda-Time v2.0

1 голос
/ 08 августа 2011

Решение, которое я использую, похоже, работает до сих пор:

public static void main(String[] args) {
    DateTimeFormatter formatterC = DateTimeFormat.forPattern("HH:mm dd M YY").withZone(DateTimeZone.forID("Europe/Copenhagen"));
    System.out.println(
        formatterC.parseDateTime("19:30 29 8 11")
    );
}
...