加天,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。它不仅通常比过时的 类 DateCalendar 更好用。它在您的情况下也有一些特定的优势:(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() 再次;我想演示时间调整器,让大家对新 类) 的强大功能有一点印象。