2015-07-22 46 views
0

我想使用java中的當前日期來標識整個星期的日期(從星期日到星期六)。如何識別java中當前日期的一週

例如:今天是星期二 - 這意味着我需要週二,週一和週日的日期。

如果當天是星期三 - 那麼我需要從星期天到星期三的日期。

如何在java中實現這個邏輯?

我可以從當前日期開始獲得星期的開始,但我不知道如何從星期開始日期獲取剩餘日期。有沒有任何Java工具可用於此?

+0

所以有一天添加到您開始星期生效之日起到您想 –

+0

一天看一看'Calendar','setWeekDate()','getFirstDayOfWeek()'。 –

回答

7

作爲參考,用來配製輸出當前日期是星期三,2015年7月22日(22/07/2015)

Java 8

LocalDate ld = LocalDate.now(); 
LocalDate sunday = ld.minusDays(ld.getDayOfWeek().getValue()); 
LocalDate tommorrow = ld.plusDays(1); 
LocalDate date = sunday; 
while (date.isBefore(tommorrow)) { 
    System.out.println(date); 
    date = date.plusDays(1); 
} 

打印

2015-07-19 
2015-07-20 
2015-07-21 
2015-07-22 

作爲替代

(這基本上將所有上述其他API的工作),你可以簡單地從今天倒着走......

LocalDate date = LocalDate.now(); 
do { 
    System.out.println(date); 
    date = date.minusDays(1); 
} while (date.getDayOfWeek() != DayOfWeek.SATURDAY); 

打印

2015-07-22 
2015-07-21 
2015-07-20 
2015-07-19 

JodaTime

LocalDate now = LocalDate.now(); 
LocalDate sunday = now.minusDays(5).withDayOfWeek(DateTimeConstants.SUNDAY); 
LocalDate tommorrow = now.plusDays(1); 
LocalDate date = sunday; 
while (date.isBefore(tommorrow)) { 
    System.out.println(date); 
    date = date.plusDays(1); 
} 

打印

2015-07-19 
2015-07-20 
2015-07-21 
2015-07-22 

日曆

作爲最後的手段。但要記住,Calendar攜帶的時間信息,所以使用beforeafterequals可能並不總是做你認爲他們應該...

Calendar cal = Calendar.getInstance(); 
cal.setFirstDayOfWeek(Calendar.SUNDAY); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 

Calendar today = Calendar.getInstance(); 

while (cal.before(today)) { 
    System.out.println(cal.getTime()); 
    cal.add(Calendar.DATE, 1); 
} 

打印

Sun Jul 19 15:01:49 EST 2015 
Mon Jul 20 15:01:49 EST 2015 
Tue Jul 21 15:01:49 EST 2015 
Wed Jul 22 15:01:49 EST 2015 
+0

永遠不會意識到可以循環'LocalDate'。這很酷。 –

+0

@EddieB這是舊''日曆'天的想法;) – MadProgrammer

+0

感謝您的解決方案!它有助於! –

0

這是使用Java 8。但是,請注意很容易的,在ISO-8601標準表示Monday當週... See the JavaDocs的第一天......所以要實現你的要求,你只需找到Monday的基本情況...

DayOfWeek是一個枚舉,表示一週的7天 - 週一,週二,週三,週四,週五,週六和週日。

除了文本枚舉名稱之外,每個星期的每一天都有一個int值。 int值遵循ISO-8601標準,從1(星期一)到7(星期日)。建議應用程序使用枚舉而不是int值來確保代碼清晰。

/** 
* @author Edward Beckett :: <[email protected]> 
* @since :: 7/22/2015 
*/ 
public class WeekOfToday{ 

public static void main(String[] args) { 

    Integer dayOfWeek = LocalDate.now().getDayOfWeek().compareTo(DayOfWeek.MONDAY) ; 
    LocalDate startOfWeek = LocalDate.now().minusDays(dayOfWeek); 
    LocalDate endOfWeek = LocalDate.now().plusDays(DayOfWeek.SUNDAY.getValue() - dayOfWeek - 1); 
    } 
} 

輸出

Start of Week : 2015-07-20 
End of Week : 2015-07-26 
0

我想身份整星期日期(從星期天到星期六)使用java中的當前日期。

這應該解決您的問題,您可以根據您的情況進一步修改。

Calendar c = Calendar.getInstance(); 
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
System.out.println("Date " + c.getTime()); 
c.add(Calendar.DATE, +1); 
System.out.println(c.getTime()); 

希望它可以幫助

+1

我認爲你需要一個'c.setFirstDayOfWeek(Calendar.SUNDAY)',否則'c.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY)'會在週日不是一週中的第一天。 – msandiford

+0

是的,你是對的,在這種情況下,如果情況需要,我們需要設置第一天。但是,正如用戶已經明確提到關於'Sunday'到'CurrentDayOfWeek'。我做到了。 – mustangDC

相關問題