Подтвердить что ты не робот

Почему Joda DateTimeFormatter не может анализировать имена часовых поясов ('z')

Из DateTimeFormatter javadoc:

Зоны: имена часовых поясов ('z') не могут быть проанализированы.

Поэтому разбор часовых поясов вроде:

System.out.println(new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse("Fri Nov 11 12:13:14 JST 2010"));

не может быть сделано в Йоде:

DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss z yyyy");
System.out.println(dtf.parseDateTime("Fri Nov 11 12:13:14 JST 2010"));
//Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "Fri Nov 11 12:13:14 JST 2010" is malformed at "JST 2010"
//at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:673)
4b9b3361

Ответ 1

Я думаю, что причина в том, что названия часовых поясов "z" условны (не стандартизированы) и неоднозначны; то есть они означают разные вещи в зависимости от страны происхождения. Например, "PST" может быть "Стандартное время в Pacific" или "Стандартное время в Пакистане".

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

Ответ 2

Вероятно, потому что некоторые сокращения в часовом поясе неоднозначны, и синтаксический анализатор не может знать, какой именно часовой пояс предназначен.

Это, конечно же, может быть одним из крошечных, странных тиков и недостающих функций, которые вы найдете после работы с Джодой на некоторое время.

Ответ 3

Сокращенные часовые пояса действительно неоднозначны, и Джода сделал еще один шаг, удалив поддержку для них, как указано в DateTimeZone javadoc: