2013-04-06 2 views
2

У меня есть значение даты типа «2013-03-28T15: 16: 58.000Z». Я хочу преобразовать его в формат «dd-MMM-yyyy». Для этого я использовал следующий код:SimpleDateFormat parsing возвращает null

public static String getTime(String time) 
{ 
    try 
    {   
     String tim = time.replace("T", " "); 
     SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", Locale.US); 
     SimpleDateFormat df2 = new SimpleDateFormat("dd-MMM-yyyy", Locale.US); 

     return df2.format(df1.parse(tim)); 
    } 
    catch (ParseException e) 
    { 
     return null; 
    } 
} 

Я получил это решение из множества сообщений здесь, в StackOverflow. Но этот код по-прежнему возвращает null. Может ли кто-нибудь сказать мне, почему?

ответ

4

Значение null возвращается из блока исключений из-за первого SimpleDateFormat возвращения null в результате недопустимого формата даты.

Шаблон Z используется для обозначения часовых поясов. Чтобы принять символ буква Z, вам необходимо окружить символ одинарными кавычками.

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'Z'", Locale.US); 

Кроме того, вы можете сделать то же самое с T характера, если вы не хотите, чтобы сделать руководство заменить:

Вместо

String tim = time.replace("T", " "); // remove 

просто использовать time и использование:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); 
0

Он бросает ParseException, анализируя строку 2013-03-28 15: 16: 58.000Z.

Постарайтесь избавиться от Z [как вы сделали с T] и с помощью SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US)

+1

Или попробуйте обработать как Z, так и T правильно, как вопрос ниже, но со следующим дополнением 'new SimpleDateFormat (« yyyy-MM-dd'T'HH: mm: ss.SSS'Z », Locale.US) ; ' – ararog

2

Он возвращается нуль, потому что он догоняет ParseException и вы говорите это, чтобы вернуть нуль. Вы должны хотя бы распечатать stacktrace, и это должно сказать вам, почему вы получаете ParseException.

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