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();