1

我正在运行以下代码6/7/2018,以便从返回的任何日期中省略周末。但是,代码似乎将以下几天确定为周末。

13/7/2018 - Friday & 14/7/2018 - Saturday

而不是

14/7/2018 - Saturday & 15/7/2018 - Sunday

我正在更新指示的字段以增加/减少我想选择的未来天数。

如果我输入 5 天返回的日期是12/7/2018,如果我输入 6 天返回的日期是15/7/2018.

有什么明显的我遗漏的东西,任何帮助将不胜感激。

Date date=new Date();
Calendar calendar = Calendar.getInstance();
date=calendar.getTime(); 
SimpleDateFormat s;
s=new SimpleDateFormat("dd/MM/yyyy");

System.out.println(s.format(date));

int days = 5; //I am updating this value to increase and decrease days
for(int i=0;i<days;)
{
    calendar.add(Calendar.DAY_OF_MONTH, 1);

    //here even sat and sun are added
    //but at the end it goes to the correct week day.
    //because i is only increased if it is week day

    if(calendar.get(Calendar.DAY_OF_WEEK)<=5)
    {
        i++;
    }

}
date=calendar.getTime(); 
s=new SimpleDateFormat("dd/MM/yyyy");
System.out.println(s.format(date));
4

1 回答 1

4
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(Locale.UK);
    LocalDate date = LocalDate.now(ZoneId.of("Pacific/Truk"));
    System.out.println(date.format(dateFormatter));
    int days = 5;

    int i = 0;
    while (i < days) {
        date = date.plusDays(1);
        DayOfWeek day = date.getDayOfWeek();
        if (! day.equals(DayOfWeek.SATURDAY) && ! day.equals(DayOfWeek.SUNDAY)) {
            i++;
        }
    }
    System.out.println(date.format(dateFormatter));

今天的输出(7 月 8 日星期日):

08/07/2018
13/07/2018

7月13日是下周五,所以显然没有把周五当成周末。

有什么明显的我失踪(?)

它不认为这很明显:Calendar班级从周日的 1 到周六的 7 对一周中的天数进行编号。这来自美国人对周的理解。因此,当您的条件是星期几应小于或等于 5 时,您将星期日 (1) 到星期四 (5) 包括在内,并过滤掉星期五 (6) 和星期六。

…如果你能指出我正确的文档方向…</p>

要在文档中查找此信息,您必须在星期几的每个常量下查看SUNDAY,等等,然后点击常量字段值链接。请参阅此答案底部的链接。

事实证明,Calendar该类设计不佳(尽管尝试使用 解决问题Date)并且现在也早已过时。相反,我建议您使用java.time现代 Java 日期和时间 API。我当然在上面的片段中做了。

许多问题之一Calendar是使用intfor day of week (以及其他具有名称而不是数字的项目)。这是不自然的,很容易混淆。有人可能会说您通过比较 5 而不是 to 来强化问题Calendar.FRIDAY,但由于美国编号,后者也不会解决您的问题。java.time'sDayOfWeek是一个枚举,并且不会邀请使用“小于”或“之前”进行比较(尽管您可以这样做,并且它适用于您的情况)。引用命名常量的代码SATURDAY不仅SUNDAY更清晰易读,而且更不容易出错。

链接

于 2018-07-08T05:45:34.887 回答