无法解析的日期:“2017-01-02T01:41:24Z”(偏移量为 10)

Unparseable date: "2017-01-02T01:41:24Z" (at offset 10)

2017-01-02T01:41:24Z 是我实际的日期格式,我想将此日期转换为 yyyy-MM-dd hh:mma 格式。

请看下面我试过的代码,

  String newsDate = "2017-01-02T01:41:24Z";
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mma");
        Date date = null;
        try
        {
            date = sdf.parse(newsDate);
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }

但在 date = sdf.parse(newsDate); 行出现以下错误:

"Unparseable date: "2017-01-02T01:41:24Z" (at offset 10)".

请指导我,我哪里出错了?

因为您使用的是不同的日期格式,这是不正确的。

改变这个

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mma");

至此

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

试试这个:

   String newsDate = "2017-01-02T01:41:24Z";    
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
   SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mma");

   try {
        texview.setText(sdf1.format(sdf.parse(newsDate)));
        } catch (ParseException e) {
          e.printStackTrace();
          System.out.println("bad pattern");
        }

其他答案在时区/偏移量解释方面是错误的。尾随的 "Z" 表示 UTC+00:00 并且不能被解释为文字。 documentation of Android 定义了可以处理这种输入的合适的模式符号 X。如果您不关心这个细节,那么您将不会得到异常,但会得到错误的数据(甚至更糟)。

因此,包括小时部分修复在内的最终解决方案如下所示:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");

注意:如果您的偏移量不带冒号,请使用 XX 而不是 XXX。

这非常适合我。

 String dateNew= "2017-01-02T01:41:24Z";

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mma");


try {
    texview.setText(sdf1.format(sdf.parse(dateNew)));
    } catch (ParseException e) {
      e.printStackTrace();
      System.out.println("bad pattern");
    }