如何在Java中验证Unix时间戳?

时间:2014-11-06 05:30:35

标签: android

我有一个Android应用程序,它在共享首选项中存储某个事件的unix时间戳。由于具有root电话的任何人都可以访问(和修改)这些文件,因此我在处理该值之前在我的应用程序中应用了验证检查。所以,我的问题是,如何验证unix时间戳?

例如

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

应该返回true

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

应该返回false

编辑:为了清楚起见,我将共享首选项中的long存储(并获取)时间戳的值。上面的代码只是为了简单起见。该函数应接受long作为其参数,验证它,并根据它是有效的unix时间戳值返回truefalse

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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;
  }