Java时间戳比较

4

我有一个时间戳以2011-01-23-12.31.45格式从外部源传递到我的应用程序中。 我需要将其与当前系统时间戳进行比较,并确保它们之间的差异小于2分钟。 有什么想法可以实现这一点吗?

2个回答

5

这是一个日期,而不是时间戳。您可以使用java.text.SimpleDateFormat来解析它,使用yyyy-dd-MM-HH.mm.ss格式:

SimpleDateFormat sdf = new SimpleDateFormat("yyy-dd-MM-HH.mm.ss");
Date date = sdf.parse(inputDateString);
long timestamp = date.getTime();

然后进行比较 - 一分钟有60 * 1000毫秒。

在进行日期时间操作时,建议始终使用joda-time - 它将:

  • 拥有线程安全的数据格式实现 - DateTimeFormat(上面那个不是线程安全的)
  • 只需执行Minutes.minutesBetween(..)即可找到两个瞬间之间的分钟数,而无需计算。

0

嗯,这个可以进行优化,但这是我想出来的。它需要一些工作,但应该能让你开始。

public class Test {

private final String serverValue = "2011-01-23-12.31.45"; //Old should fail
private final String serverValueNew = "2011-03-28-14.02.00"; //New

private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss");


public boolean plusMinusTwoMins(String serverValue) {
    boolean withinRange = false;
    Date now = Calendar.getInstance().getTime();
    Date serverDate = now;

    try {
        serverDate = dateFormat.parse(serverValue);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    long millis = Math.abs(now.getTime() - serverDate.getTime());
    System.out.println("Millis: " + millis);

    //1000ms * 60s * 2m
    if (millis <= (1000 * 60 * 2)) {
        withinRange = true;
    }

    return withinRange;
}

public static void main(String[] args) {
    Test test = new Test();
    boolean value = test.plusMinusTwoMins(test.serverValue);
    System.out.println("Value: " + value);
    boolean value2 = test.plusMinusTwoMins(test.serverValueNew);
    System.out.println("Value2: " + value2);
}

}


注意静态的SimpleDateFormat - 它不是线程安全的。 - Bozho
是的,我写得很快。只是想给出一种实现这个的方法。我投了你的答案。基本上是相同的想法,但使用Joda Time来保证线程安全。 - blong824

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接