2

我想解析这样发送给我的日期..

2011-03-02T09:06:07.404-07:00

问题是在使用 SimpleDateFormat 对象时,我得到一个解析异常,我很确定它是因为时区中的冒号。

这是我的 SimpleDateFormat 设置。

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

以下是开发人员文档中可解析日期字符串的可能差异列表。如您所见,它们在时区中都没有冒号。

                     yyyy-MM-dd 1969-12-31
                     yyyy-MM-dd 1970-01-01
               yyyy-MM-dd HH:mm 1969-12-31 16:00
               yyyy-MM-dd HH:mm 1970-01-01 00:00
              yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
              yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
       yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
       yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000

我的第二个问题是当我得到一个时区设置为 Z 的日期字符串时。这是将时区设置为 GMT 的标准,相当于 0000。但是我再次收到 ParseException。这是日期字符串的示例。

2011-01-14T10:50:31.520Z

编辑

这是我解析日期字符串的方式..

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = null;
try {
    Log.d("CCDateUtilss", "Need to remove the colon from the date string in the timeszone");
    date = sdf.parse(string);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
return date.getTime();

可能的解决方案

我可以通过并替换字符串中出现的问题,以便它正确解析还是有一个我不知道的更优雅的解决方案?

提前致谢

4

1 回答 1

3

我使用以下方法来解析来自不同来源的文本日期,这些来源可能会返回不同的格式(包括带冒号的时区):

private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");


private long getTime(String time) throws Exception {
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        //For this you may need to manually adjust time offset
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'");
        //For this you may need to manually adjust time offset
    }
    return this.format.parse(time).getTime();
}

Note:如果字符串以 . 结尾,您可能需要手动调整时区偏移量Z

为了效率,这总是首先尝试最后的工作格式。

问候。

于 2012-11-20T12:33:13.957 回答