2017-07-25 106 views
0

在我的应用程序的用户可以选择日期的日历,然后选择他想要多少天添加。加入天,机器人工作室

添加天工作出色,但我需要跳过工作日。

例如你会选择一天,并添加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(); 
} 

感谢你的帮助,我不是编程高手。我是业余的,我仍然在学习..

+1

你为什么不直接检查结果是星期六还是星期天,并相应地增加2或1天? – Juan

回答

0

你应该检查结果是什么日期,即检查它的SATURDAYSUNDAY然后加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 
+0

谢谢你,这正是我需要的。但我还有1个问题。我如何跳过这个假期。我需要创建一个ArayList - 每天添加假日或在android工作室是这样的东西? –

+0

使用假期创建Date的ArrayList,并将它们与生成的日期进行比较,以检查它是否是假期,并且还要创建Day和No的地图。的日子将在下周的某一天添加​​,或者使用开关盒编写逻辑,以便在确定假期和下一工作日的哪一天后添加天数。 – JRG

1

对于这样的操作我绝对推荐使用现代的Java日期时间的API。不仅比过时的课程DateCalendar更好用。它也有你的情况的一些具体优点:(1)它提供了一个LocalDate表示没有一天,这似乎是你的数据比过时的Date更精确的模型,它总是包括时间的天太的时间日期。 (2)增加日期和检查星期几更方便。

要使用现代化的API在Android上,您将需要获得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();我想演示时间调节器,以给出对新类的力量的印象)。