【问题标题】:Compare 2 (epoch) times, if one is newer then the other do比较 2(纪元)次,如果一个比另一个更新
【发布时间】:2015-02-25 19:31:04
【问题描述】:

目标是比较 2 次,1 次来自 android 设备,另一次来自数据库服务器(在 epoch 中),http://www.epochconverter.com/ 如果一个时间比另一个时间新,则应添加一个值(在列表视图中标记为新,newItem = true;)。 提供的时间已经使用 (simpledateformat) 转换为字符串输出(今天、一个月中的某天、昨天)。

比较“在”转换为字符串之前的两个(纪元)时间的最简单方法是什么?我已经在 stackoverflow 上进行了一些搜索,但我不确定哪一个最适合我的目标。

private String getDateString(final Date d) {
    if (d == null)
        return "";

    int[] elements1, elements2;

    elements1 = getDateElements(System.currentTimeMillis()); <-- current time
    elements2 = getDateElements(d.getTime()); <-- db time

    if (elements1[0] == elements2[0] && elements1[1] == elements2[1]) {
        if (elements1[2] == elements2[2])
            return "Today";

        final Calendar c = Calendar.getInstance();
        c.setTimeInMillis(System.currentTimeMillis());
        c.add(Calendar.DAY_OF_MONTH, -1);
        elements1 = getDateElements(c.getTimeInMillis());

        if (elements1[2] == elements2[2])
            return "Yesterday";

    }
    return Util.formatDate(d);
}

public static String formatDate(final long dt) {
    return formatDate(new Date(dt));
}

public static String formatDate(final Date date) {
    final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
            DateFormat.SHORT);
    return df.format(date);
}

【问题讨论】:

  • 你试过 Date 类中的after 方法吗?类似new Date().after(db time)...
  • 嗨 Diego,Thx,还没有,我首先要确保 im catching the correct data, as everything is comming from SQL db and im 没有进入 SQL,但我认为我在正确的轨道上。

标签: android date epoch


【解决方案1】:

根据您要进行的比较,您已经拥有所需的一切:

long currentTime = System.currentTimeMillis();
long dbTime = d.getTime();

if (dbTime < currentTime) {
    // Do something
}

或者,按照 Diego 在 cmets 中的建议,您可以使用 Date#afterbefore 方法:

public boolean isInFuture(Date d) {
    return d.after(new Date());
}

【讨论】:

  • 嗨亚当,这确实是一个解决方案。您认为这可以将其保留在 GetDateString 函数中吗?我更多地考虑单独的功能。如前所述,im looking for feedback for the right approach. The values 来自 SQL 数据库库,不幸的是我不使用 SQL。
  • 你知道,我想我没有阅读其余的方法。将其放入单独的方法中会起作用,但这取决于您。您所做的只是比较两个long 值。我会用你可以使用的方法更新答案。
  • 嗨,亚当。不错,看着不错我会在我在家的时候尝试,仍然是@work。再次感谢我让您知道的努力。
  • 嗨,亚当,不幸的是不起作用,我将 currentTime 和 dbTime 声明为 private long。然后将您提到的代码插入 GetDateString, Log.d("CURRENT TIME: ", String.valueOf(currentTime)); Log.d("DBTIME:", String.valueOf(dbTime));给两个 0
  • 如果它们都是 0,那么你从来没有给它们赋值。
猜你喜欢
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
相关资源
最近更新 更多