2014-11-06 2 views
0

У меня есть приложение для Android, которое хранит временную метку unix определенного события в общих предпочтениях. Поскольку эти файлы могут быть доступны (и изменены) всеми, у кого есть встроенный телефон, я применяю проверку проверки в своем приложении перед обработкой этого значения. Итак, мой вопрос заключается в том, как можно проверять временную метку unix?Как проверить временную метку Unix на Java?

Например

String timestamp = "1415251687"; 
validateUnixTime(timestamp); 

должен вернуть true и

timestamp = "1415-dummydata"; 
validateUnixTime(timestamp); 

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

Edit: Просто чтобы быть ясно, я хранящий (и забирающий) значение временной отметки long из общих настроек. Вышеприведенный код был просто для простоты. Функция должна принять long в качестве ее параметра, проверить его и вернуть true или false, исходя из того, что оно является допустимым значением временной метки unix.

+0

вы на самом деле говорим о проверке строковое не TIMESTAMP –

+0

@AbdallahAlaraby Это было только ради примера. Я сохраняю временную метку как 'long' в файле общих настроек. Проверьте отредактированный вопрос. –

ответ

0

Это зависит от того, когда вы хотите, чтобы отметка времени считалась недействительной. но следующий код (который я получил от another answer) может помочь вам получить основную идею.

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(); 
} 
+0

Объем этой функциональности принципиально отличается от моей. Но я понимаю, что вы имели в виду. Я попробую аналогичный подход. –

0

Первый конвертировать временную метку в удобное для человека время.

long dv = Long.valueOf(timestamp_in_string)*1000;// its need to be in milisecond 
Date df = new java.util.Date(dv); 
String vv = new SimpleDateFormat("yyyy-MM-dd").format(df); 
if(isValidDate(vv){ 
    Log.d("DateIsValid","true"); 
} else { 
    Log.d("DateIsValid","false"); 
} 

затем проверить, если дата конвертированы действительна или не

public static boolean isValidDate(String inDate) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    dateFormat.setLenient(false); 
    try { 
     dateFormat.parse(inDate.trim()); 
    } catch (ParseException pe) { 
     return false; 
    } 
    return true; 
    } 
+0

Это звучит выполнимо. Позвольте мне попробовать. –

+0

'SimpleDateFormat' генерирует предложение подавления линта следующим образом:« Чтобы получить локальное форматирование, используйте getDateInstance(), getDateTimeInstance() или getTimeInstance() или используйте новый SimpleDateFormat (шаблон String, локаль Locale), например, Locale.US для ASCII даты «. –

+0

подавить это предупреждение. Я понятия не имею, почему это дает. –

Смежные вопросы