2011-07-07 19 views
1

特定のjava.util.Dateを指定した場合、どのようにして開始時刻と終了時刻を生成できますかそれは与えられた日付です。例えば、私の私の日付はAugust 25, 2011で、その後、私の開始日はAugust 25, 2011 00 00 00だろうと日付の私の最後はAugust 25, 2011 23 59 59java.util.Date/JodaTime:java.util.Dateを指定すると、指定された日付の開始時刻と終了時刻を生成します

背景次のようになります(私はこの質問をする理由を知りたい場合は以下を読んで)

私はJPAを使用してdateをこのようなMySqlデータベースにマップします。私はdateが同様の時間を持ちたいので、私は、私は特定の日付指定したすべてのデータを照会する必要がある、とdateは、上記のように保存されているので、私は私が望むものを達成するために、日付範囲を必要とするTemoporalType.TIMESTAMP

@Temporal(TemporalType.TIMESTAMP) 
private Date dateProcess; //java.util.Date 

を使用します。

私のゲームプランは、JodaTime#DateTinmejava.util.Dateを変換し、そこ開始日と終了日を構築し、私はJPQLにパラメータとして渡すことができるようにバックを、それを変換することです。しかし、それはJodaTimeは非常に不変であるようだ、私はどこでもセッターメソッドを参照してくださいすることはできません。

答えて

7

java.util.Dateは、の時刻を表し、タイムゾーンまたはカレンダーを参照しません。同じ瞬間は、オブザーバーの時間帯に応じて、開始/終了日が非常に異なるでしょう。

あなたが何か行うことができます:あなたがしたい場合は、最後の二つの変数から

DateTime dateTime = new DateTime(date.getTime(), timeZone); 
LocalDate localDate = dateTime.ToLocalDate(); 

DateTime startOfDay = localDate.toDateTimeAtStartOfDay(timeZone); 
DateTime startOfNextDay = localDate.plusDays(1).toDateTimeAtStartOfDay(timeZone); 

を、あなたはjava.util.Dateの値に戻って取得することができます。通常は両方とも深夜ですが、の場合はとなります。

2011年8月25日23:59などの値の欠落を避けるため、包括的な方法で現在の日の最後の秒ではなく、翌日の開始を排他的に使用する必要があります。 59.500 ...

+0

'date.getDate()'は、 'java.util.Date'の' date'ですか?もしそうなら、 'date.getDate()'はすでに廃止されていません、Jon?それは 'date.getTime()'であってはなりませんか? –

+0

@ハリー:申し訳ありません、私は 'date.getTime()'を意味しました - 基本的にはミリ秒で 'long'値を取得する方法です。 –

+0

ありがとうございました:)。私は今それを試してみます。 –

1

あなたが望むタイプはDateMidnightと思います。新しいDateMidnightを作成し、問題のDateTimeを渡すと、同じ日の午前0時に日付が取得されます。 plusDays()機能を使用して、1日を追加して終了時間を取得することもできます。

+2

私は、毎日のタイムゾーンでも毎日ではなく、*が*深夜であっても、「DateMidnight」を避ける傾向があります。 'LocalDate.toDateTimeAtStartOfDay'は、より良いIMO呼び出しです。 –

+0

クール - 以前はそれを使用していません。ありがとう! – aardvarkk

1
Date date; // your date 

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 

calendar.set(Calendar.HOUR, 0); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
Date startDate = calendar.getTime(); 

calendar.set(Calendar.HOUR, 23); 
calendar.set(Calendar.MINUTE, 59); 
calendar.set(Calendar.SECOND, 59); 
Date endDate = calendar.getTime(); 
+1

これは、システムのタイムゾーンが正しいと仮定しています...私はまた、Joda Timeを*もっと*良いAPIとして使用することをお勧めします... –

関連する問題