2014-04-16 26 views
4

我想獲得未來三週的最後一天。獲得未來三週的最後一天Java

例如,如果今天是4月16日星期三,我將在5月4日星期日得到結果。

我寫這樣的函數

public static Date nexThreeWeekEnd() { 
    Date now = new Date(); 
    Date nextWeeks = DateUtils.truncate(DateUtils.addWeeks(now, 3), Calendar.DATE); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(nextWeeks); 
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_WEEK)); 
    return calendar.getTime(); 
} 

DateUtils從該庫使用:

org.apache.commons.lang.time.DateUtils; 

但是這個函數將返回週三,5月7日,這意味着它會準確地返回天的當前日期。

沒有必要重寫我的功能。任何其他方式來解決我的問題將非常appriciated。 謝謝。

+0

DateUtil的代碼? –

+0

我編輯了我的問題並添加了圖書館,謝謝:D – xtiger

+0

在你給你的例子中指定了兩到三週,它應該從星期日還是兩週返回三週? – dacwe

回答

1

使用下面的代碼希望它有助於

Calendar cal = Calendar.getInstance(); 
    int currentDay = cal.get(Calendar.DAY_OF_WEEK); 
    int leftDays= Calendar.SUNDAY - currentDay; 
    cal.add(Calendar.DATE, leftDays) 
1

與剛剛嘗試:

Calendar c = Calendar.getInstance(); 
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
c.add(Calendar.WEEK_OF_YEAR, 2); 

DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); 
System.out.println(df.format(c.getTime())); 

輸出:

2014/05/04 
1

你可以做這樣的事情:

Calendar calendar = Calendar.getInstance().getFirstDayOfWeek(); 
calendar.add(Calendar.WEEK_OF_YEAR, 4); 
calendar.add(Calendar.DAY_OF_MONTH, -1); 
1

在Java中,我們可以使用公曆

請檢查下面的代碼可以幫助你

Date d = new Date(); 
    GregorianCalendar cal1 = new GregorianCalendar(); 
    cal1.setTime(d); 
    System.out.println(cal1.getTime()); 
    int day = cal1.get(Calendar.DAY_OF_WEEK); 
    cal1.add(Calendar.DAY_OF_YEAR,-(day-1));/*go to start of the week*/ 
    cal1.add(Calendar.WEEK_OF_YEAR,3); // add 3 weeks 
    day = cal1.get(Calendar.DAY_OF_MONTH);// get the end Day of the 3rd week 
    System.out.println("end of the 3rd week ="+day); 
1

問題等回答使用舊的過時的課程。

java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date & .Calendar。見Oracle Tutorial。許多java.time功能被移植到ThreeTen-Backport中的Java中,並進一步適用於Android的ThreeTenABP

LocalDate類表示沒有時間和時區的僅有日期的值。您可以使用TemporalAdjuster生成相對於原始值的新LocalDate值。 TemporalAdjusters(注意複數)類實現了幾個方便的調節器,包括我們需要的調節器,nextOrSame(WeekOfDay)WeekOfDay課程是一個方便的枚舉,代表星期一至星期日的每週七天。

LocalDate start = LocalDate.of (2014 , Month.APRIL , 16); 
LocalDate nextOrSameSunday = start.with (TemporalAdjusters.nextOrSame (DayOfWeek.SUNDAY)); 
LocalDate twoWeeksAfterNextOrSameSunday = nextOrSameSunday.plusWeeks (2); 

轉儲到控制檯。

System.out.println ("start: " + start + " | nextOrSameSunday: " + nextOrSameSunday + " | twoWeeksAfterNextOrSameSunday: " + twoWeeksAfterNextOrSameSunday); 

開始:2014年4月16日| nextOrSameSunday:2014-04-20 | twoWeeksAfterNextOrSameSunday:2014-05-04

相關問題