2

我有一个“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。谁能告诉我为什么?

4

3 回答 3

5

由于第一次返回是由于日期格式无效null而从异常块返回的值。SimpleDateFormatnull

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);
于 2013-04-06T20:55:54.167 回答
2

它返回 null 是因为它正在捕获 ParseException 并且您告诉它返回 null。您至少应该打印出堆栈跟踪,这应该会告诉您为什么会收到 ParseException。

于 2013-04-06T20:59:26.433 回答
0

它在解析字符串 2013-03-28 15:16:58.000Z 时抛出 ParseException。

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

于 2013-04-06T20:56:44.627 回答