1

特定の日の 00:00:00 より後の秒を削除することにより、エポックからの現在の日付を秒単位で取得しようとする次のコードがあります。

public void method(Date date) {

...

long dayDate = date.getTime() - (date.getTime() % 86400L);

...

}

何らかの理由で、dayDate は単に date.getTime() に設定されており、数学演算子はここでは何もしていません。

これを修正するにはどうすればよいですか?

4

2 に答える 2

2

Joda Timeライブラリを使用することをお勧めします。必要な日付、時刻、カレンダーに関連するほとんどの機能を備えています。

于 2012-03-10T04:15:06.110 に答える
1

Ignacio が既に指摘したように、1970 年 1 月 1 日からのミリ秒date.getTime()数を返すため、次の行になるはずです。

long dayDate = date.getTime() - (date.getTime() % 86400000L);

で新しいDateを作成する予定dayDateがある場合は、タイムゾーンが正しいことを確認してください。たとえば、UTC/GMT タイムゾーンである必要があります。そうしないと、次のような奇妙なことが起こる可能性があります。

Date epoch = new Date(0);
System.err.println(epoch);

Thu Jan 01 01:00:00 CET 1970私の日付はデフォルトでCET(+1)タイムゾーンで作成されるため、これは私のマシンで得られます。したがって、コードをDate使用し、計算した long を使用して新しいインスタンスを作成すると、日付はその日の 0:00 ではなく 1:00 になります。

ただし、すぐに Joda Time (プロジェクトのオプションではない場合があります) に頼ることなく、Calendar を使用して秒数を取得できます。

// Create the calendar and set the date.
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);

// Set the hours, minutes, etc. to 0.
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.AM_PM, Calendar.AM);

long dayDate = calendar.getTime();
于 2012-03-10T07:52:26.940 に答える