加天,android工作室
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
还是 SUNDAY
,然后加上 2 或 1 得到下一个 MONDAY
。
NOTE: I do not know what is FirstClass.hotovo so I have removed temporary from below code and you can add it as you would have it in your project. Below is to demonstrate how to check day and add 1 or 2 day respectively.
这是示例代码。
来电者:
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
更精确地模拟您的数据,它总是包括一天中的时间也是如此。 (2) 添加天数和查看星期几更方便。
要在 Android 上使用现代 API,您需要获取 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()
再次;我想演示时间调整器,让大家对新 类) 的强大功能有一点印象。
在我的应用程序中,用户可以选择带有日历的日期,然后选择他想要添加的天数。
添加工作日非常好,但我需要跳过工作日。
例如,您将选择日期并添加 +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
。
NOTE: I do not know what is FirstClass.hotovo so I have removed temporary from below code and you can add it as you would have it in your project. Below is to demonstrate how to check day and add 1 or 2 day respectively.
这是示例代码。
来电者:
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
更精确地模拟您的数据,它总是包括一天中的时间也是如此。 (2) 添加天数和查看星期几更方便。
要在 Android 上使用现代 API,您需要获取 ThreeTenABP,请参阅
你的方法变成了
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()
再次;我想演示时间调整器,让大家对新 类) 的强大功能有一点印象。