Сравнение меток времени Java - PullRequest
4 голосов
/ 29 марта 2011

У меня есть метка времени, передаваемая из внешнего источника в мое приложение в формате 2011-01-23-12.31.45. Мне нужно сравнить его с текущей системной отметкой времени и убедиться, что разница составляет менее 2 минут. Есть идеи, как этого добиться?

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Это дата, а не отметка времени.Вы можете разобрать его, используя 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 голосов
/ 29 марта 2011

Ну, это можно оптимизировать, но это то, что я придумал.Это требует некоторой работы, но это должно помочь вам начать.

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);
}

}

...