如何在java中验证unix时间戳?

wb1gzix0  于 2023-08-02  发布在  Java
关注(0)|答案(3)|浏览(101)

我需要验证给定的输入字符串是一个有效的Timestamp在毫秒。
例如,如果给定Timestamp

String time ="1310966356458";

字符串
然后它应该返回true。
如果

String time ="1000";


则应返回false;
请帮帮我提前致谢

vngu2lb8

vngu2lb81#

我们无法告诉您什么对您的应用程序是合理的。如果有一个对每一种情况都正确的极限,它就会被建立起来。可能只有在开发应用程序之后的时间戳才是合理的,而不是在将来。

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

b5buobof

b5buobof2#

为什么不直接从给定的时间中减去纪元时间。如果结果是否定的,那么它是无效的。

nimxete2

nimxete23#

这是一个很老的问题,但我是这样做的:

boolean isNumberValue(String value) {
      //TODO - check if is number
      String regex = "^[0-9]+$";
      Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
      Matcher matcher = pattern.matcher(value);
      boolean matchFound = matcher.find();

      if(matchFound) {
           //System.out.println("Match found");
           return true;
      } else {
          //System.out.println("Match not found");
          return false;
      }
   }

   boolean isTimestamp(String timestamp) {      
        try {
            long time = Long.valueOf(timestamp);
            Date date = new Date((long)time);
            long dateOld = date.getTime();
            //if no exception was raised, then its unix and only digits
            if(!isNumberValue(String.valueOf(dateOld))) {
                return false;
            }
            return true;
        } catch (Exception e) {
            return false;
        }
      
   }

   if (isTimestamp(1679308838)){
       System.out.println("Is unix timestamp");
   }else{
       System.out.println("NOT unix timestamp");
   }

字符串

相关问题