Строка синтаксического анализа Java по дате возвращает неверную дату

#java

#java

Вопрос:

У меня возникла распространенная проблема, заключающаяся в том, что я хочу разобрать строку на дату.

Строка выглядит следующим образом 15.06.11 13:38:33 UTC . Но результат будет 15.38.0011 13:38:33 UTC при форматировании с использованием того же средства форматирования, которое использовалось для анализа строки по дате. TimeInMillis возвращает отрицательное значение -61818978087000 .

 SimpleDateFormat formatter = new SimpleDateFormat("dd.mm.yyyy HH:mm:ss z");
formatter.setLenient(false);  
Date time = formatter.parse("15.06.11 13:38:33 UTC");    
Calendar timestamp = Calendar.getInstance();  
timestamp.setTime(time);
  

Я благодарен за любую помощь, которую я могу получить. Возможно, я совершаю какую-то глупую ошибку, но я ее не вижу. Пожалуйста, открой мне глаза.

Ответ №1:

Месяцы — это MM , а не mm (то есть минуты)
и yyyy до yy (ваш год, как кажется, двухзначный) (спасибо Питеру, что заметил это)

Ответ №2:

Сделайте это

 dd.MM.yyyy HH:mm:ss z
  

Из документа

 M   Month in year   Month   July; Jul; 07
m   Minute in hour  Number  30
  

Ответ №3:

Вам нужно изменить месяц на MM , но также изменить год на yy в противном случае при использовании yyyy будет предполагаться, что 15.06.11 было в этом году 11 вместо 2011

 System.out.println(new SimpleDateFormat("dd.MM.yy HH:mm:ss z")
                       .parse("15.06.11 13:38:33 UTC"));
  

печатает для меня (поскольку я GMT 1)

 Wed Jun 15 14:38:33 BST 2011
  

Комментарии:

1. Я всегда пробую код сам. Я много раз попадался на том, что предполагал, что остальная часть кода верна. 😉