2016-03-30 15 views
2

私は、現在の日付を取得するためにdate()を使用しているJavaアプリケーションを持っており、テスト目的でdate()から取得している日付を操作しようとしています。Javaバイナリの外部からjava.util.Date date()を操作する方法は?

システム日付(Windowsの場合)を過去の日付、たとえば2014年1月1日に設定しようとしましたが、Javaアプリケーションはシステム日付以外の場所からリアルタイムの日付を取得し続けているようです。

日付を操作することは可能ですか?その場合、date()関数がバイナリの外部から返す日付をどのように操作できますか?

+0

あなたはどのJavaの実装を使用していますか? – Natecat

+0

@ Natecat java version "1.7.0_80" JREビルド1.7.0_80-b15 – Azeworai

+0

@ TungD.Nguyen、日付を変更してJavaアプリケーションを再起動した後にプロセスを強制終了しましたが、まだ実際のリアルタイムの日付は取得されていません2014年1月1日 – Azeworai

答えて

1

JavaDateクラスはSystem.currentTimeMillis()で報告されたシステム時間を使用します。これにより、Windowsには、低解像度のWin32/64 API呼び出しGetSystemTimeAsFileTime()が呼び出されます。これは、「UTC形式の現在のシステム日付と時刻」を常に返します(Microsoft documentation)。

コードにアクセスしていて、カスタム以外の任意の時刻を表すカスタムDateオブジェクトを作成する必要がある場合は、Calendarクラスを使用することをお勧めします。例えば

次のように上に与えられた

Calendar calendar = new GregorianCalendar(); 
calendar.set(Calendar.YEAR, 2014); 
calendar.set(Calendar.MONTH, 0); // 0 = January, 11 = December 
calendar.set(Calendar.DAY_OF_MONTH, 1); // 1 to 31 

、新しいDateオブジェクトを取得することができない。Javaの外部から操作する

Date date = calendar.getTime(); 
2

必要はありません。 Java内のテストでは、現在の瞬間として報告された値を変更できます。

java.time

古い旧バージョンのクラスを使用しています。これらのクラスは、Java 8以降に組み込まれたjava.timeフレームワークに取って代わられています。

抽象的なClockクラスをオーバーライドして、独自の実装を提供することができます。あなたのクラスでは、テスト目的のために必要に応じて報告する日時を変更することができます。

クラスは、変更された実装を都合よく提供するために、fixed,offset、およびtickのようないくつかの静的メソッドを提供します。

関連する問題