2011-07-07 37 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有時間一樣,所以我用TemoporalType.TIMESTAMP

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

我需要查詢所有的數據給出了具體的日期,因爲date存儲爲上面,我需要一個日期範圍,以達到我想要的。

我的比賽計劃是java.util.Date轉換爲JodaTime#DateTinme,進而構建開始和結束日期還有,並將其轉換回,這樣我可以作爲參數傳遞給JPQL。但似乎JodaTime是非常不變的,我似乎無法在任何地方看到setter方法。

回答

7

A 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()',是'date'那裏'java.util.Date'?如果是這樣,那麼不是'date.getDate()'已經被棄用了,喬恩?不應該是'date.getTime()'? –

+0

@哈里:對不起,我的意思是'date.getTime()' - 基本上以毫秒爲單位獲得'long'值的方法。 –

+0

非常感謝:)。我現在會嘗試。 –

1

我相信你想要的類型是DateMidnight。製作一個新的DateMidnight,並將其傳遞給DateTime,它將在同一天早上的午夜。然後您可以使用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

這是假設系統時區是正確的...我也建議使用喬達時間作爲一個*多*更好的API ... –

相關問題