【问题标题】:Unparseable date: "2017-01-02T01:41:24Z" (at offset 10)无法解析的日期:“2017-01-02T01:41:24Z”(偏移量 10)
【发布时间】:2017-01-02 07:44:53
【问题描述】:
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); 行我收到以下错误:
“无法解析的日期:“2017-01-02T01:41:24Z”(偏移量 10)”。
请指导我,我哪里出错了?
【问题讨论】:
标签:
android
date
simpledateformat
unparseable
【解决方案1】:
因为您使用了不正确的不同日期格式。
改变这个
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mma");
到这里
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
【解决方案2】:
试试这个:
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");
}
【解决方案3】:
这对我来说非常有效。
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");
}
【解决方案4】:
关于时区/偏移量的其他答案是错误的 - 解释。尾随的“Z”表示 UTC+00:00,不得仅解释为文字。 documentation of Android 定义了可以处理这种输入的合适的模式符号 X。如果您不关心这个细节,那么您将不会得到异常而是错误的数据(更糟)。
因此,包括小时部分修复在内的最终解决方案如下所示:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
注意:如果您有不带冒号的偏移量,请使用 XX 而不是 XXX。