添加天,android工作室

时间:2017-07-25 21:10:29

标签: java android date datetime android-calendar

在我的应用程序中,用户可以选择日期与日历,然后选择他想要添加的天数。

增加工作天数,但我需要平日工作。

例如,您将选择日期并添加+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();
}

感谢您的帮助,我不是编程方面的专家。我很业余,我还在学习..

2 个答案:

答案 0 :(得分:1)

对于这样的操作,我绝对建议使用现代Java日期和时间API。与过时的班级DateCalendar相比,它不仅通常更好。它在您的情况下也有一些特定的优势:(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