加入天,机器人工作室
在我的应用程序的用户可以选择日期的日历,然后选择他想要多少天添加。加入天,机器人工作室
添加天工作出色,但我需要跳过工作日。
例如你会选择一天,并添加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
或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
谢谢你,这正是我需要的。但我还有1个问题。我如何跳过这个假期。我需要创建一个ArayList - 每天添加假日或在android工作室是这样的东西? –
使用假期创建Date的ArrayList,并将它们与生成的日期进行比较,以检查它是否是假期,并且还要创建Day和No的地图。的日子将在下周的某一天添加,或者使用开关盒编写逻辑,以便在确定假期和下一工作日的哪一天后添加天数。 – JRG
对于这样的操作我绝对推荐使用现代的Java日期时间的API。不仅比过时的课程Date
和Calendar
更好用。它也有你的情况的一些具体优点:(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()
;我想演示时间调节器,以给出对新类的力量的印象)。
你为什么不直接检查结果是星期六还是星期天,并相应地增加2或1天? – Juan