我有一个Android应用程序,它在共享首选项中存储某个事件的unix时间戳。由于具有root电话的任何人都可以访问(和修改)这些文件,因此我在处理该值之前在我的应用程序中应用了验证检查。所以,我的问题是,如何验证unix时间戳?
例如
String timestamp = "1415251687";
validateUnixTime(timestamp);
应该返回true
和
timestamp = "1415-dummydata";
validateUnixTime(timestamp);
应该返回false
编辑:为了清楚起见,我将共享首选项中的long
存储(并获取)时间戳的值。上面的代码只是为了简单起见。该函数应接受long
作为其参数,验证它,并根据它是有效的unix时间戳值返回true
或false
。
答案 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;
}