【问题标题】:Unparseable Date Error when parsing UTC string through SimpleDateFormat to Date通过 SimpleDateFormat 将 UTC 字符串解析为日期时出现无法解析的日期错误
【发布时间】:2014-09-07 15:11:45
【问题描述】:

我正在尝试编写一些内容,它将在 UTC 时间中接收具有以下格式的字符串,并将其格式化为从手机获取的本地时区。但是,尽管查看了SimpleDateFormat documentation,但我遇到了我的示例字符串无法解析的错误:

W/System.err﹕ java.text.ParseException: Unparseable date: "2014-07-16T21:00:00:000+0000" (at offset 19)
W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:555)
[...]
D/Set time:﹕ Wed Jul 16 15:10:03 PDT 2014
D/TimeInMilli:﹕ 1405548603565

代码:

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone(); //Get phone's PST zone

String UTCinput = "2014-07-16T21:00:00:000+0000"; //2:00PM PST
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
format.setTimeZone(tz);

Date dateCal = new Date();

try {
    dateCal = format.parse(UTCinput);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

cal.setTime(dateCal);
Log.d("Set time: ", String.valueOf(dateCal));
Log.d("TimeInMilli: ", String.valueOf(cal.getTimeInMillis()));

我的解析方式有什么问题?

【问题讨论】:

  • 遇到这种谜团时,复制粘贴示例代码。 StackOverflow.com 上有很多 SimpleDateFormat 代码示例,您可以在发布之前尝试过。
  • 提示:使用 Joda-Timejava.time 库而不是众所周知的麻烦的 java.util.Date 和 SimpleDateFormat。您可以直接传递您的ISO 8601 兼容字符串,而无需格式化/转换。 DateTime dateTime = new DateTime( "2014-07-16T21:00:00:000+0000" );

标签: java android parsing date simpledateformat


【解决方案1】:

您的输入 String 需要与您的 DateFormat 模式匹配

String UTCinput = "2014-07-16T21:00:00.000+0000"; //2:00PM PST
                                      ^--- was ":"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多