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

Android 如何在Java中验证Unix时间戳?,android,Android,我有一个Android应用程序,它在共享首选项中存储某个事件的unix时间戳。因为这些文件可以被任何有根手机的人访问和修改,所以我在处理该值之前在我的应用程序中应用验证检查。所以,我的问题是,如何验证unix时间戳 比如说 String timestamp = "1415251687"; validateUnixTime(timestamp); 应该返回true和 应该返回false 编辑:为了清楚起见,我从共享的首选项中存储和获取时间戳的值。上面的代码只是为了简单起见。函数应接受long作为

我有一个Android应用程序,它在共享首选项中存储某个事件的unix时间戳。因为这些文件可以被任何有根手机的人访问和修改,所以我在处理该值之前在我的应用程序中应用验证检查。所以,我的问题是,如何验证unix时间戳

比如说

String timestamp = "1415251687";
validateUnixTime(timestamp);
应该返回true和

应该返回false


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

这取决于您希望时间戳何时被视为无效。但是下面我从中得到的代码可能会帮助您理解主要思想

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

首先将时间戳转换为人类可读的日期

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

实际上,您所说的是验证字符串,而不是Timestamp@AbdallahAlaraby这只是为了以身作则。我将时间戳存储在共享首选项文件中。请检查已编辑的问题。此功能的范围与我的完全不同。但我明白你的意思。我将尝试类似的方法。这听起来是可行的。让我试试。SimpleDataFormat生成一个lint抑制建议,如下所示:若要获取本地格式,请使用getDateInstance、getDateTimeInstance或getTimeInstance,或使用新的SimpleDataFormatString模板,将Locale Locale与示例Locale.US一起用于ASCII日期。抑制此警告。我不知道为什么它会给它.A/c,一个新的SimpleDataFormat接受第二个参数Locale,所以我传递了Locale.US,警告消失了。
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;
  }