2011-07-18 6 views
3

指定された入力文字列が有効であることを確認する必要があります。有効な文字はTimestampです(ミリ秒単位)。例えばJavaのUNIXタイムスタンプを検証する方法は?

Timestamp

String time ="1310966356458"; 

与えられた後、それはtrueを返す必要がある場合。

String time ="1000"; 

それはfalseを返す必要がある場合。

助けてください。事前に感謝

+4

なぜ1000は、有効なタイムスタンプではありませんか? 1.1.1970の0:00以降1000ミリ秒ですか? – Jacob

+4

なぜ '1000'は有効なタイムスタンプではありませんか? 'Thu Jan 01 00:00:01 +0000 1970'です。実際、有効な整数(負の値も)は有効なUNIXタイムスタンプです。 – Koraktor

+0

エポック後の1000ミリ秒はまだ有効なタイムスタンプです。賢明なタイムスタンプの範囲を定義する必要があります。感知可能な範囲はケース固有のものであり、例えば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

完全な常識をアップアップします。 – Perception

0

あなたが与えられた時間からエポック時間を引くだけではどうですか?結果が負の場合は無効です。

+0

... 1970年以前の時間がない限り。 –

+2

彼はJavaのためにアセンブラを求めていません;-) – PeterMmm

+0

ピーター、あなたはコーヒーが必要です。 :)男は1970年1月1日深夜までに月に着陸しましたか? 0 - -1415094000 = 1415094000、これは月の着陸が以前に発生したことを意味します。忘れてはならないのは、数学では、2つのネガは肯定的です。 –

関連する問題