2011-06-29 32 views

回答

32

我會用:

LocalDate today = now.toLocalDate(); 
LocalDate tomorrow = today.plusDays(1); 

DateTime startOfToday = today.toDateTimeAtStartOfDay(now.getZone()); 
DateTime startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone()); 

如果startOfToday <= time < startOfTomorrow然後檢查任何特定時間。

當然,它部分取決於究竟什麼是存儲在數據庫中 - 和什麼時候帶你感興趣的

+0

我想,你在那裏有一個錯字。你使用'今天'兩次來讀取一天的開始...... – nfechner

+0

@nfechner:修正,謝謝。 –

+0

注意本答案中上面代碼中「<=」與「<」的用法。這就是所謂的「半開放」方法,其中開始*包含*而結尾* *排除*。這種方法是定義一段時間的明智之舉。此外,Joda-Time中的['Interval'](http://www.joda.org/joda-time/apidocs/org/joda/time/Interval.html)類可用於跟蹤一對DateTime對象在本答案的代碼中定義。 Interval類在進行比較時使用Half-Open方法('contains','overlap','gap',&'abuts')。 –

0
import org.joda.time.DateTime; 
import org.joda.time.DateTimeMidnight; 

DateTime dateTimeAtStartOfToday = new DateTime(new DateTimeMidnight()); 
DateTime dateTimeAtEndOfToday = new DateTime((new DateTimeMidnight()).plusDays(1)); 
+3

我會建議*不*使用'DateTimeMidnight'因爲*不是*總是午夜,因爲DST的變化。 –

+0

@JonSkeet我從來沒有見過那裏沒有午夜。並不總是凌晨2點到3點,但總是有午夜。或者那只是美國的事情? –

+2

@Bob:那只是美國的事情。根據當地規則,夏時制可能會隨時發生變化。我發現困難的方式。 –

0

這工作...

DateTime dt = new DateTime(); 
DateMidnight dtStartDate = dt.toDateMidnight(); 
DateMidnight dtEndDate = dt.plusDays(1).toDateMidnight(); 
System.out.println(dt + "\n" + dtStartDate + "\n" + dtEndDate); 

...但據作爲SQL,我傾向於使用BETWEEN作爲where子句而不是> < = stuff

+0

如果由於DST更改導致兩個日期中的某一個不包含午夜,則會引發異常。 toDateTimeAtStartOfDay是更好的IMO。 –

+0

你知道,我無法重現你說的例外。在這個過程中,使用DateMidnight比上述所有方法都要好,因爲它有一個toInterval()方法,可以輕鬆地解釋DST轉換。我將這個解決方案作爲一個單獨的答案加入。 –

+1

找到一個在午夜前跳過的時區。 IIRC,在南美洲的某個地方這樣做 - 因爲我已經發現了困難的方式... –

3

這樣做效果更好,事實證明DateTime有一個名爲toInterval的方法,它可以做到這一點(從午夜到午夜)。在我的測試中,DST轉換似乎沒有問題。

DateTime now = new DateTime(); 
DateTime startOfToday = now.toDateMidnight().toInterval().getStart(); 
DateTime endOfToday = now.toDateMidnight().toInterval().getEnd(); 
System.out.println("\n" + now + "\n" + startOfToday + "\n" + endOfToday + "\n"); 

JODA看起來很好的想法。

+5

DateMidnight was [deprecated](http://www.joda。org/joda-time/apidocs/org/joda/time/DateMidnight.html)由於午夜問題。建議使用[withTimeAtStartOfDay](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay())方法 –

1
if((sinceDate.getDayOfYear() == now.getDayOfYear()) && (sinceDate.year() == now.year())) 
    //yep, do something today; 

適合我。

相關問題