【问题标题】:SimpleDateFormat parsing returns nullSimpleDateFormat 解析返回 null
【发布时间】:2013-03-29 03:58:03
【问题描述】:

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

【问题讨论】:

    标签: java android json date


    【解决方案1】:

    由于日期格式无效,第一个 SimpleDateFormat 返回 null,正从异常块返回 null 值。

    Zpattern 用于表示时区模式。要接受文字 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);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 或者尝试像下面的问题一样正确处理 Z 和 T,但添加以下 new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-27
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多