Я использую java.text.SimpleDateFormat
для анализа строковых представлений значений даты/времени внутри XML-документа. Я вижу все времена, которые имеют значение часа 12, сдвинутое на 12 часов в будущее, т.е. е. Через 20 минут после полудня анализируется 20 минут за полночь следующего дня.Почему 12:20 разводят до 0:20 на следующий день?
Я написал блок-тест, который, как представляется, подтверждает, что ошибка возникает при разборе (я проверил возвращаемые значения от getTime()
с помощью команды оболочки Linux date
). Теперь мне интересно:
- есть ошибка в методе
parse()
? - есть что-то не так с входной строкой?
- Я использую неправильную строку формата для ввода?
Данные ввода взяты из службы Yahoo YWeather. Вот тест и его выход:
public class YWeatherReaderTest
{
public static final String[] rgDateSamples = {
"Thu, 08 Apr 2010 12:20 PM CEST",
"Thu, 08 Apr 2010 12:20 AM CEST"
};
public void dateParsing() throws ParseException
{
DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy K:m a z",
Locale.US);
for (String dtsSrc : YWeatherReaderTest.rgDateSamples) {
Date dt = formatter.parse(dtsSrc);
String dtsDst = formatter.format(dt);
System.out.println(dtsSrc);
System.out.println(dtsDst);
System.out.println();
}
}
}
Thu, 08 Apr 2010 12:20 PM CEST Fri, 09 Apr 2010 0:20 AM CEST Thu, 08 Apr 2010 12:20 AM CEST Thu, 08 Apr 2010 0:20 PM CEST
Второй линейный выход второй итерации немного странно, потому что 00:20 не PM. Однако значение миллисекунды объекта Date
соответствует (ошибочному) времени в течение 20 минут после полудня.
Это еще один хороший пример «SELECT ISN» t сломан ". Несмотря на то, что я никогда не встречал ошибку в зрелой и широко используемой стандартной библиотеке, я все же иногда обвиняю библиотеку, если не могу найти проблему. И до сих пор я всегда ошибался. –