【问题标题】:Android DOM Parsing - Converting pubDate tagAndroid DOM 解析 - 转换 pubDate 标签
【发布时间】:2012-11-02 10:10:56
【问题描述】:

我正在使用 DOM Parser 来解析这个 XML 提要:http://loc.grupolusofona.pt/index.php/?format=feed

它工作正常,解析我需要的所有字段,但我想将从标签 pubDate 获得的结果从“Wed,2012 年 10 月 31 日 17:12:42 +0000”转换为“2 天前,17:12 " 或类似的东西。

我该怎么做?

提前致谢。

【问题讨论】:

  • 我一直在尝试 Joda-Time 但没有成功.. 然而 Christian 的解决方案让我走上了正轨,无论如何谢谢 :)

标签: android dom datetime xml-parsing


【解决方案1】:

这是您需要的代码:

String dateString = "Wed, 31 Oct 2012 12:12:42 +0100";
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
Date date = null;
try {
    date = sdf.parse(dateString);
    String timeOfDay = new SimpleDateFormat("HH:mm").format(date);
    java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
    java.sql.Timestamp timeStampNow = new Timestamp((new java.util.Date()).getTime());

    long secondDiff = timeStampNow.getTime() / 1000 - timeStampDate.getTime() / 1000;
    int minuteDiff = (int) (secondDiff / 60);
    int hourDiff = (int) (secondDiff / 3600);
    int dayDiff = daysBetween(date, new Date()) - 1;
    if (dayDiff > 0) {
        System.out.println("Posted " + dayDiff + " days ago @ " + timeOfDay);
    } else if (hourDiff > 0) {
        System.out.println("Posted " + hourDiff + " hour(s) ago @ " + timeOfDay);
    } else if (minuteDiff > 0) {
        System.out.println("Posted " + minuteDiff + " minute(s) ago @ " + timeOfDay);
    } else if (secondDiff > 0) {
        System.out.println("Posted " + secondDiff + " second(s) ago @ " + timeOfDay);
    }
} catch (ParseException e) {
    e.printStackTrace();
}

天数:

public static int daysBetween(Date startDate, Date endDate) {
    int daysBetween = 0;
    while (startDate.before(endDate)) {
        startDate.setTime(startDate.getTime() + 86400000);
        daysBetween++;
    }
    return daysBetween;
}

输出: 发布于 2 天前 @ 12:12

【讨论】:

  • 完美!好吧,几乎,不知道为什么你在计算 daysBetween 时输入 -1,我把它取下来并且工作正常 :)