2014-05-30 3 views
0

Я получаю null, возвращаемый SimpleDateFormat. Но я чувствую, что все правильно.SimpleDateFormat не удается разобрать и возвращает null

Ниже мой фрагмент кода

format = new SimpleDateFormat("yyyy-dd-MM'T'H:mm:ss'Z'", Locale.US); 
format.setLenient(true); 
ParsePosition pos = new ParsePosition(0); 

String timeStr = "2013-10-05T01:21:07Z"; 
System.out.println(format.format(new Date())); 
System.out.println(timeStr); 

Date d = format.parse(timeStr,pos); 
d.getTime(); 

дает выход

2014-30-05T13:43:05Z 
2013-10-05T01:21:07Z 
Exception in thread "main" java.lang.NullPointerException 

Я попробовал несколько вариантов, упомянутых в других сообщений в этом форуме. Но я все еще получаю ошибку. Я пропускаю что-то тривиальное?

+3

'NullPointer' @, какая линия ??? –

+0

Вам нужно опубликовать полную информацию о стеке здесь –

+2

Не получил Nullpointer для кода выше ... где именно вы указываете? – Aryan

ответ

0

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

  1. Посмотрите еще раз на свой узор. Возможно, вам нужен образец, совместимый с ISO-8601. Это немного другое: «yyyy-MM-dd'T'HH: mm: ssXXX» (для Java 7) Кажется, вы изменили позицию месяца и дня!

  2. Z - это не просто буква в строках ISO. Это означает часовой пояс UTC (время Zulu), но вы анализируете строку с системным часовым поясом (потому что вы явно не задали часовой пояс на своем объекте формата), что может быть совершенно иным. Правильное решение - использовать символ шаблона X, введенный в Java 7. Если вы все еще используете более старую версию Java, вы можете избежать Z (как вы это сделали), но ДОЛЖНЫ установить часовой пояс вашего объекта формата на «GMT». В противном случае вы получите неверные результаты без исключения.

Смежные вопросы