【问题标题】:Selenium add weekdays to a date, weekend days not calculated correctlySelenium 将工作日添加到日期,周末未正确计算
【发布时间】:2018-12-15 03:18:35
【问题描述】:

我在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));

【问题讨论】:

  • 我一直在寻找答案,目前找不到我要找的东西,否则不会在这里发布。对此是新手,之前没有使用过日期,所以如果你能指出我正确的文档方向,那将非常感谢。根据我一直在阅读的内容尝试了许多不同的方法来更新代码,但遗憾的是没有得到想要的结果。
  • 为什么要投反对票?我发现这个问题清晰而有用。虽然研究工作可能不是很清楚,但我相信它已经完成了。这个问题非常清楚所期望的行为以及观察到的行为有何不同,它提供了一个关于最小的示例,并且肯定是完整的和可验证的。大多数第一个 Stack Overflow 问题都没有这个问题那么好。

标签: java weekday java.util.calendar date


【解决方案1】:
    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) 和星期六。

...如果您能指出文档的正确方向...

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

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

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

链接

【讨论】:

  • 非常感谢,会考虑使用这个。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多