Как проверить временную метку unix в java?

Мне нужно проверить, что данная входная строка является допустимой Timestamp в миллисекундах.

Например, если данный Timestamp

String time ="1310966356458";

Затем он должен вернуть true.

if

String time ="1000";

тогда он должен вернуть false;

Пожалуйста помоги. заранее спасибо


person Roshan    schedule 18.07.2011    source источник
comment
Почему 1000 не является допустимой временной меткой? 1000 миллисекунд после 0:00 01.01.1970?   -  person Jacob    schedule 18.07.2011
comment
Почему 1000 не должно быть допустимой временной меткой? Это Thu Jan 01 00:00:01 +0000 1970. Фактически, любое допустимое целое число (даже отрицательное) является допустимой временной меткой UNIX.   -  person Koraktor    schedule 18.07.2011
comment
1000 мс после эпохи по-прежнему является допустимой отметкой времени. Вы должны определить диапазон разумных меток времени. Разумный диапазон зависит от конкретного случая, например, вы ожидаете записи после 2010 года.   -  person Petteri H    schedule 18.07.2011
comment
Пожалуйста, помогите, как определить правильный диапазон метки времени   -  person Roshan    schedule 18.07.2011


Ответы (2)


Мы не можем сказать вам, что разумно для вашего приложения. Если бы был предел, который был бы правильным для каждой ситуации, он был бы встроен. Возможно, что имеют смысл только временные метки после того, как вы разработали свое приложение, а не в будущем.

public static final String RELEASE_DATE = "2011/06/17";
private static final long MIN_TIMESTAMP;

static {
    try {
        MIN_TIMESTAMP = new SimpleDateFormat("yyyy/MM/dd").parse(RELEASE_DATE).getTime();
    } catch (ParseException e) {
        throw new AssertionError(e);
    }
}

// after the software was release and not in the future.
public static final boolean validTimestamp(long ts) {
    return ts >= MIN_TIMESTAMP && ts <= System.currentTimeMillis();
}

Однако может случиться так, что отметка времени представляет, когда кто-то родился. В этом случае минимальная метка времени может быть отрицательной.

Возможно, отметка времени — это время, когда что-то истекает (например, билеты). Некоторые из них будут в прошлом (возможно, не раньше этого года), а некоторые — в будущем. (возможно, не более чем на 2 года вперед).


Время может быть отрицательным. Человек высадился на Луну до 1970 года, поэтому отметка времени будет отрицательной.

String MAN_ON_MOON = "1969/07/21 02:56 GMT";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm Z");
System.out.println(sdf.parse(MAN_ON_MOON).getTime());

отпечатки

-14159040000
person Peter Lawrey    schedule 18.07.2011
comment
Голосую за здравый смысл. - person Perception; 18.07.2011

Почему бы просто не вычесть время эпохи из времени, которое вам дано. Если результат отрицательный, то это недействительно.

person Joel    schedule 18.07.2011
comment
... если у вас не может быть времени до 1970 года. ;) - person Peter Lawrey; 18.07.2011
comment
Он просит Java, а не ассемблер ;-) - person PeterMmm; 18.07.2011
comment
Питер, тебе нужен кофе. :) Высадился ли человек на Луне до полуночи 1 января 1970 года? 0 - -1415094000 = 1415094000, что означает, что высадка на Луну произошла раньше. Помните, что в математике два минуса дают плюс, даже если ваши школьные учителя сказали бы иначе, два минуса делают правильно! - person Bayani Portier; 13.01.2014