2009-03-11 18 views
4

java.util.Dateはほとんど廃止予定ですので、指定された日付(UTC時刻)のタイムスタンプを取得する正しい方法は何ですか? System.currentTimeMillis()と比較できるもの。与えられた日付のSystem.currentTimeMillis()?

+0

注意:['java.util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)のような面倒な古い日時クラスは、 )、['java.util.Calendar'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)、' java.text.SimpleTextFormat'は現在[ (https://en.wikipedia.org/wiki/Legacy_system)、[java.time](https://docs.oracle.com/javase/8/docs/api/java/time/package)に取って代わりました。 -summary.html)クラスを使用します。 –

答えて

10

Calendarクラスを使用すると、特定のタイムゾーンの特定の時刻にタイムスタンプを作成できます。

Calendar cal = new GregorianCalendar(); 
cal.set(Calendar.DAY_OF_MONTH, 10); 
// etc... 

if (System.currentTimeMillis() < cal.getTimeInMillis()) { 
    // do your stuff 
} 

編集:あなたはそれを持っていたら、その後、ミリ秒単位のタイムスタンプは、と比較して取得することができますカレンダーインスタンスからのミリ秒単位で時間を得るために、より直接的な方法を使用するように変更します。ありがとうございますOutlawプログラマー

+2

カレンダーには実際にgetTime()。getTime()よりも少し直接的なgetTimeInMillis()メソッドがあります。とにかく+1。 –

1

Calendarクラスをご覧ください。

現在の時刻(推奨されていません)でデータを作成し、それからカレンダーを作成できます(他の方法もあります)。

7

日付が使用された多くのものの "公式の"置き換えはカレンダーです。残念なことに、それはむしろ不器用で過度に設計されています。あなたの問題は次のように解決することができます:

long currentMillis = System.currentTimeMillis(); 
Date date = new Date(currentMillis); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 
long calendarMillis = calendar.getTimeInMillis(); 
assert currentMillis == calendarMillis; 

カレンダーは、時間(時、分、秒、など)においても一つのフィールド、異なる方法で初期化することができます。 Javadocを見てください。

3

自分で試してみませんでしたが、プロジェクトで外部のライブラリが許可されている場合は、JODA-Timeプロジェクト(オープンソース)を見てください。 AFAIK、JODAの時間は、日付/時刻に新しいJSR(通常はJava7)に大きく貢献しました。

多くの人がジョダ時間はすべてjava.util.Date/Calendarの問題;-)

間違いなく試してみる価値を解決すると主張します。

+0

JODA-Time - 現在のjava.util.DateとCalendarは、多くの点でかなり壊れています(JODAページでJODAプロジェクトが最初に作成された理由についての動機付けの話があります)。 –

関連する問題