Android - 如何解析此日期[2014-04-23T14:20:00.000-07:00]?

时间:2014-04-23 22:50:37

标签: java android date android-dateutils

我想转换这种日期格式:

2014-04-23T14:20:00.000-07:00

进入日期对象,以便我可以使用此方法来获得差异:

DateUtils.getDateDifference(DATE_OBJECT);

...

我尝试过使用' SimpleDateFormat'但它抛出异常,多次检查代码,但不起作用:

    String pubDate = "2014-04-23T14:20:00.000-07:00";
    SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z", Locale.ENGLISH);
    try {
        Date pDate =  df.parse(pubDate);
        pubDate = "This post was published " + DateUtils.getDateDifference(pDate);
    } catch (ParseException e) {
        Log.e("DATE PARSING", "Error parsing date..");
        pubDate = "Couldn't be retrieved.";
    } 

成功实现它的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

根据Android文档(@MarcoAcierno评论中给出的链接),您需要符号Z五次来解析时区偏移量。请注意,在Java-6中,没有用于处理偏移部分中冒号的内置解决方案,但Java-7引入了新符号X(此处三次:XXX)。 (Android!= Java)的另一个例子。所以最终的模式如下:

SimpleDateFormat sdf =
  new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ");
java.util.Date d = sdf.parse("2014-04-23T14:20:00.000-07:00");

不需要指定区域设置,因为您的格式不包含任何语言或区域敏感部分(仅为纯ISO格式)。

答案 1 :(得分:0)

如果您使用了优秀的Joda-Time库而不是臭名昭着的java.util.Date和SimpleTextFormat类,则可以将该标准ISO 8601字符串直接传递给DateTime构造函数。 Joda-Time使用ISO 8601作为默认值。

DateTime dateTime = new DateTime( pubDate );