Java SimpleDataFormat解析返回null

Java SimpleDataFormat解析返回null,java,android,json,date,Java,Android,Json,Date,我有一个类型为“2013-03-28T15:16:58.000Z”的日期值。我想把它转换成“dd-MMM-yyyy”格式。为此,我使用了以下代码: public static String getTime(String time) { try { String tim = time.replace("T", " "); SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-

我有一个类型为“2013-03-28T15:16:58.000Z”的日期值。我想把它转换成“dd-MMM-yyyy”格式。为此,我使用了以下代码:

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。有人能告诉我原因吗?

由于第一个
SimpleDataFormat
返回的
null
是无效的日期格式,因此从异常块返回
null

Z
模式用于表示时区模式。要接受文字
Z
字符,需要用单引号将字符括起来

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'Z'", Locale.US);
此外,如果不希望手动替换,也可以对
T
字符执行相同的操作:

而不是

String tim = time.replace("T", " "); // remove
只需使用
时间
并使用:

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

它正在解析字符串2013-03-28 15:16:58.000Z时引发ParseException


尝试摆脱Z[就像您对T所做的那样]并使用
SimpleDataFormat(“yyyy-MM-dd-HH:MM:ss.SSS”,Locale.US)

它返回null,因为它捕获了ParseException,您告诉它返回null。您至少应该打印出stacktrace,这会告诉您为什么会出现ParseException。

或者尝试像下面的问题一样正确地处理Z和T,但添加以下内容
新的SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS'Z',Locale.US”)