簡體   English   中英

添加天數,android studio

[英]Add days, android studio

在我的應用程序中,用戶可以選擇日歷日期,然后選擇要添加的天數。

添加工作日非常好,但我需要跳過工作日。

例如,您將選擇天並添加+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();
}

謝謝您的幫助,我不是編程專家。 我是業余愛好者,我仍在學習..

您應該檢查結果的星期SATURDAY即檢查星期SATURDAY還是SUNDAY ,然后加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

對於這樣的操作,我絕對建議您使用現代的Java日期和時間API。 通常,它不僅比過時的DateCalendar類要好得多。 在您遇到的情況中,它還具有一些特定的優勢:(1)它提供了一個LocalDate ,它表示沒有日期的日期,這似乎比過時的Date (總是也包括Date更精確地對數據建模。 (2)添加天數和檢查星期幾更為方便。

要在Android上使用現代API,您將需要獲得ThreeTenABP,請參閱以下問題:如何在Android Project中使用ThreeTenABP 要在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() ;我想演示一下時間調整器,以給人一些較新類的力量的印象)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM