2012-09-05 55 views
0

Java問:在任何一天,我想確定上週五(比如說)上漲的日期。 例如:如果我今天運行我的程序(即9月5日星期三),我應該得到結果爲「上週五在8月31日」。如果我在9月12日星期六運行它,結果應該是07年9月7日,依此類推(日期格式不是嚴格問題,儘管如此)確定某一天的某一天的日期

是否有任何可用的api,或者是否需要編寫根據當天的情況,這個計劃可以回溯很多天,等等?

謝謝!

+1

你熟悉JodaTime? –

+0

JODA(或)日曆 – kosa

+0

可能的重複[如何獲取過去的星期日和即將到來的Java星期日?](http://stackoverflow.com/questions/4536230/how-to-get-the-past-sunday-和即將到來的星期日在Java)和[這](http://stackoverflow.com/q/10328584/642706)和[這](http://stackoverflow.com/q/22890644/642706)和其他許多人。 –

回答

3

如何:

Calendar cal = Calendar.getInstance(); 
int day = cal.get(Calendar.DAY_OF_WEEK); 
cal.add(Calendar.DAY_OF_MONTH, -((day + 1) % 7)); 
Date lastFriday = cal.getTime(); 

我們可以隨時返回到上週五通過減去Calendar.DAY_OF_WEEK值當前日期,加上1。例如,如果當前日期是星期一(價值= 2),我們減去(2 + 1)我們回到3天到週五。如果我們在星期二做同樣的事情,我們會回到(3 + 1)天 - 也是星期五。

如果當天是星期五或星期六,我們需要確定我們只能分別回0或1天,所以我們只需要使用(day + 1)值的模7。

+0

這實際上在哪裏做與週五有關的任何邏輯? – djechlin

+0

更新爲嘗試並解釋 – codebox

+0

太棒了,+1!只是一點點注意:'cal.add();'返回'void'。 – sp00m

0
int day = cal.get(Calendar.DAY_OF_WEEK); 
int dayDiff = (day+1)%7; 
if(dayDiff == 0) 
    dayDiff = 7; 
cal.add(Calendar.DAY_OF_MONTH, - dayDiff); 
0

我最近開發Lamma Date其特別設計用於該用例:

new Date(2014, 7, 1).previous(DayOfWeek.FRIDAY); // 2014-06-27 
new Date(2014, 7, 2).previous(DayOfWeek.FRIDAY); // 2014-06-27 
new Date(2014, 7, 3).previous(DayOfWeek.FRIDAY); // 2014-06-27 
new Date(2014, 7, 4).previous(DayOfWeek.FRIDAY); // 2014-06-27 
new Date(2014, 7, 5).previous(DayOfWeek.FRIDAY); // 2014-07-04 
new Date(2014, 7, 6).previous(DayOfWeek.FRIDAY); // 2014-07-04 
new Date(2014, 7, 7).previous(DayOfWeek.FRIDAY); // 2014-07-04 
相關問題