2017-07-25 107 views
0

在我的應用程序的用戶可以選擇日期的日曆,然後選擇他想要多少天添加。加入天,機器人工作室

添加天工作出色,但我需要跳過工作日。

例如你會選擇一天,並添加15天,結果將是週六或週日,但在這種情況下,我需要總是週一如果結果是這些日子之一。

這裏是方法加入天

public static Date addDays(Date date, int days) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.add(Calendar.DATE, days + FirstClass.hotovo); 
    return cal.getTime(); 
} 

感謝你的幫助,我不是編程高手。我是業餘的,我仍然在學習..

+1

你爲什麼不直接檢查結果是星期六還是星期天,並相應地增加2或1天? – Juan

回答

0

你應該檢查結果是什麼日期,即檢查它的SATURDAYSUNDAY然後加2或1得到下一個MONDAY

注意:我不知道什麼是FirstClass.hotovo,因此我已經從下面的代碼中刪除了臨時文件,並且可以像在項目中那樣添加臨時文件。以下是演示如何檢查日期並分別添加1或2天。

下面是示例代碼。

來電:

addDays(new Date(), 18); 

你的方法:

public static Date addDays(Date date, int days) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.add(Calendar.DATE, days); 
    Log.d("TEST", "BEFORE CHECKING: " + cal.getTime().toString()); 
    // SATURDAY is the last day of week so add 2 days 
    if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { 
     cal.add(Calendar.DATE, 2); 
     // SUNDAY is the first day of week so add 1 day 
    } else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { 
     cal.add(Calendar.DATE, 1); 
    } // else not required as it means its one of the week day 
    Log.d("TEST", "AFTER UPDATING: " + cal.getTime().toString()); 
    return cal.getTime(); 
} 

樣品試驗

合力一天SATURDAY因此增加2天,得到MONDAY

07-25 15:46:55.729 4219-4219/? D/TEST: BEFORE CHECKING: Sat Aug 12 15:46:55 PDT 2017 
07-25 15:46:55.729 4219-4219/? D/TEST: AFTER UPDATING: Mon Aug 14 15:46:55 PDT 2017 

合力天是SUNDAY因此增加1天得到MONDAY

07-25 15:47:57.634 4322-4322/? D/TEST: BEFORE CHECKING: Sun Aug 13 15:47:57 PDT 2017 
07-25 15:47:57.634 4322-4322/? D/TEST: AFTER UPDATING: Mon Aug 14 15:47:57 PDT 2017 

合力一天TUESDAY所以不加入任何多天

07-25 15:52:27.115 4445-4445/? D/TEST: BEFORE CHECKING: Tue Aug 15 15:52:27 PDT 2017 
07-25 15:52:27.115 4445-4445/? D/TEST: AFTER UPDATING: Tue Aug 15 15:52:27 PDT 2017 
+0

謝謝你,這正是我需要的。但我還有1個問題。我如何跳過這個假期。我需要創建一個ArayList - 每天添加假日或在android工作室是這樣的東西? –

+0

使用假期創建Date的ArrayList,並將它們與生成的日期進行比較,以檢查它是否是假期,並且還要創建Day和No的地圖。的日子將在下週的某一天添加​​,或者使用開關盒編寫邏輯,以便在確定假期和下一工作日的哪一天後添加天數。 – JRG

1

對於這樣的操作我絕對推薦使用現代的Java日期時間的API。不僅比過時的課程DateCalendar更好用。它也有你的情況的一些具體優點:(1)它提供了一個LocalDate表示沒有一天,這似乎是你的數據比過時的Date更精確的模型,它總是包括時間的天太的時間日期。 (2)增加日期和檢查星期幾更方便。

要使用現代化的API在Android上,您將需要獲得ThreeTenABP,看this question: How to use ThreeTenABP in Android Project。要在Java 8或更高版本中使用它,只需進入內置。

你的方法變得

public static LocalDate addDays(LocalDate date, int days) { 
    date = date.plusDays(days + FirstClass.hotovo); 
    // weekend? 
    DayOfWeek dow = date.getDayOfWeek(); 
    if (dow.equals(DayOfWeek.SATURDAY) || dow.equals(DayOfWeek.SUNDAY)) { 
     date = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); 
    } 
    return date; 
} 

請注意,使用老班(如果你認爲有時間調整部分看起來有點棘手的代碼進行比較,代碼是如何明確和不言自明的,你可以改爲只是再次使用date.plusDays();我想演示時間調節器,以給出對新類的力量的印象)。