2011-07-18 45 views
3

我需要验证给定的输入字符串是一个有效的Timestamp以毫秒为单位。如何验证java中的unix时间戳?

例如,如果给定的Timestamp

String time ="1310966356458"; 

那么就应该返回true。

如果

String time ="1000"; 

那么它应该返回false;

请帮忙。在此先感谢

+4

为什么是1000不是一个有效的时间戳?在1970年1月1日0点后1000毫秒? – Jacob

+4

为什么'1000'不是一个有效的时间戳?它是'Thu Jan 01 00:00:01 +0000 1970'。实际上,任何有效的整数(甚至是负数)都是有效的UNIX时间戳。 – Koraktor

+0

纪元后1000 ms仍然是有效的时间戳。您应该定义一系列明智的时间戳。明智的范围是特定的情况下,也许你期望2010年后的条目。 –

回答

6

我们不能告诉你什么是你的应用程序明智的。如果对于每种情况都有一个限制,那么这个限制是正确的。在开发应用程序之后,只有时间戳才是明智的。

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 
+0

Upvoting纯粹的常识。 – Perception

0

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

+0

...除非你可以在1970年以前有过;;) –

+2

他要求Java不是汇编程序;-) – PeterMmm

+0

彼得,你需要一杯咖啡。 :)人类在1970年1月1日午夜之前登上月球吗? 0 - -1415094000 = 1415094000,这意味着月球着陆发生在之前。请记住,在数学方面,即使你的学校老师会说不然,两个否定就会产生积极的结果,但是两个错误是正确的! –