2011-07-17 48 views
0

因此,我有一個以毫秒爲單位的時間(以前從System.currentTimeMillis()獲取)保存在一個長變量中。我現在需要的是一種確定時間是否在當前實際周內的方法。我需要獲得結果作爲布爾值。什麼是最好的方法來做到這一點?確定以毫秒爲單位給出的時間是否在本週內

+0

你能夠使用庫嗎?喬達是一個優秀的時間/日期圖書館。 – Dunes

+0

您是否想在本週開始時使用本地會議(美國週日,現代世界週一)? –

回答

1
public static boolean withinThisRange(long milliseconds, Date startDate, Date endDate) 
{ 
    Date date = new Date(milliseconds); 
    return date.after(startDate) && date.before(endDate); 
} 
2

隨着Joda

new DateTime().weekOfWeekyear().toInterval().contains(millis); 

您可以檢查它挑選出了整整一個星期正確通過執行類似

System.out.println(new DateMidnight(2011, 12, 31).weekOfWeekyear().toInterval()); 

它打印2011-12-26T00:00:00.000/2012-01-02T00:00:00.000。向您顯示它已正確找到跨越年邊界的一週。請注意,Joda默認情況下認爲星期日是一週的第一天。不確定你是否可以改變這個星期一,如果這是你需要的。

由於Joda對象是不可變的(只有少數情況是不可變的),它們通常非常短暫,在上面的代碼中幾乎沒有性能開銷,因爲默認GC在處理短期活的物體。但是你所獲得的是一個巨大的可讀性獎金。

-1

獲取當前周開始的毫秒數和下一週開始的毫秒數。再查看,如果輸入的時間是這兩個數值之間:

public boolean isInCurrentWeek(long time) { 
    Calendar cal1 = GregorianCalendar.getInstance(); 
    Calendar cal2; 
    cal1.set(Calendar.DAY_OF_WEEK, 0); 
    cal1.set(Calendar.HOUR_OF_DAY, 0); 
    cal1.set(Calendar.MINUTE, 0); 
    cal1.set(Calendar.SECOND, 0); 
    cal1.set(Calendar.MILLISECOND, 0); 
    cal2 = (GregorianCalendar) cal1.clone(); 
    cal2.add(Calendar.DATE, 7); 
    return (time >= cal1.getTimeInMillis() && time < cal2.getTimeInMillis()); 
} 
0

如果必須使用的JavaSE API的,我會強烈建議做這種方式。對未來的維護者來說更容易,他們可能不是真正的java人員,也不瞭解WEEK_OF_YEAR領域的噩夢。

public static boolean isCurrentWeek(long time) { 
    Calendar now = Calendar.getInstance(); 
    Calendar work = Calendar.getInstance(); 
    work.clear(); 
    work.set(Calendar.YEAR, now.get(Calendar.YEAR)); 
    work.set(Calendar.MONTH, now.get(Calendar.MONTH)); 
    work.set(Calendar.DATE, now.get(Calendar.DATE)); 
    work.getTime(); //force computation of WEEK_OF_MONTH 
    work.set(Calendar.DAY_OF_WEEK, work.getFirstDayOfWeek()); 
    final Date start = work.getTime(); 
    work.add(Calendar.DAY_OF_YEAR, 7); 
    final Date end = work.getTime(); 
    Date timeStamp = new Date(time); 
    return timeStamp.before(end) && !timeStamp.before(start); 
} 
相關問題