繁体   English   中英

添加天数,android studio

[英]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。 通常,它不仅比过时的DateCalendar类要好得多。 在您遇到的情况中,它还具有一些特定的优势:(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM