在我的应用程序中,用户可以选择日期与日历,然后选择他想要添加的天数。
增加工作天数,但我需要平日工作。
例如,您将选择日期并添加+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();
}
感谢您的帮助,我不是编程方面的专家。我很业余,我还在学习..
答案 0 :(得分:1)
对于这样的操作,我绝对建议使用现代Java日期和时间API。与过时的班级Date
和Calendar
相比,它不仅通常更好。它在您的情况下也有一些特定的优势:(1)它提供了一个LocalDate
代表一个没有时间的日期,它似乎比过时的Date
更精确地建模您的数据,它总是包括时间也是如此。 (2)增加日期和查看星期几更方便。
要在Android上使用现代API,您需要获取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()
;我想要展示时间调整器,以给出一些关于新类的力量的印象。)
答案 1 :(得分:0)
您应该检查结果日期是什么,例如检查其{"@class":"my.wrapper.ValueWrapper",
"response": ["org.apache.openjpa.kernel.DelegatingResultList",
[{"@class":"my.entity.TaxInfoEntity","taxType":"01","taxVal":"0.07"}, ..."]]"}
或SATURDAY
,然后添加2或1以获得下一个SUNDAY
。
注意:我不知道什么是FirstClass.hotovo所以我从下面的代码中删除了临时代码,你可以像在项目中一样添加它。下面是演示如何检查日期和分别添加1或2天。
以下是示例代码。
呼叫者:
MONDAY
你的方法:
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();
}
,因此需要2天才能获得SATURDAY
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
,因此需要1天才能获得SUNDAY
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