[英]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。 通常,它不僅比過時的Date
和Calendar
類要好得多。 在您遇到的情況中,它還具有一些特定的優勢:(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.