Почему 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)
Ответы
Ответ 1
Я думаю, что причина в том, что названия часовых поясов "z" условны (не стандартизированы) и неоднозначны; то есть они означают разные вещи в зависимости от страны происхождения. Например, "PST" может быть "Стандартное время в Pacific" или "Стандартное время в Пакистане".
Если вам интересно, этот сайт содержит список большого количества названий часовых поясов. Нетрудно определить случаи, когда есть двусмысленность.
Ответ 2
Вероятно, потому что некоторые сокращения в часовом поясе неоднозначны, и синтаксический анализатор не может знать, какой именно часовой пояс предназначен.
Это, конечно же, может быть одним из крошечных, странных тиков и недостающих функций, которые вы найдете после работы с Джодой на некоторое время.
Ответ 3
Сокращенные часовые пояса действительно неоднозначны, и Джода сделал еще один шаг, удалив поддержку для них, как указано в DateTimeZone javadoc: