Я использую java.text.SimpleDateFormat
для анализа строковых представлений значений даты / времени внутри XML-документа. Я вижу все времена, в которых значение часа 12 смещено на 12 часов в будущее, т.е. е. Анализ 20 минут после полудня означает 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 минут после полудня.