[英]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.