【问题标题】:How to skip Weekend (Sat & Sun) from whole month calendar如何从整个月历中跳过周末(周六和周日)
【发布时间】:2019-09-07 12:28:22
【问题描述】:

试图从月历中跳过周末

Calendar cal = Calendar.getInstance();
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
for (int i = 0; i < dayOfMonth; i++) {
    id("prevDayTrackButton").click();
    Thread.sleep(1000);
}

【问题讨论】:

  • 您希望id("prevDayTrackButton").click(); 仅在工作日发生,对吗?
  • 我建议你不要使用Calendar。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time APILocalDate

标签: java calendar weekday


【解决方案1】:
int dayOfWeek = cal.get (Calendar.DAY_OF_WEEK);
boolean isWeekday = ((dayOfWeek >= Calendar.MONDAY) && (dayOfWeek <= Calendar.FRIDAY));

如果星期几是 SaturdaySundayisWeekday 将是 false

【讨论】:

  • @GirisH:如果我的回答解决了你的问题,那么你可以考虑接受它。
【解决方案2】:
    LocalDate myDate = LocalDate.of(2019, 4, 13);//LocalDate.parse("2019-04-13");
    DayOfWeek dayOfWeek = myDate.getDayOfWeek();
    int dayOfWeekIntValue = dayOfWeek.getValue();
    System.out.println(dayOfWeekIntValue);
    String dayOfWeekName = dayOfWeek.name();
    System.out.println(dayOfWeekName);
    boolean isWeekday = (dayOfWeekIntValue >= 1 && dayOfWeekIntValue <= 5);//Day is between MONDAY and FRIDAY, return true
    System.out.println(isWeekday);

而不是旧的Date 类使用LocalDate

【讨论】:

    【解决方案3】:
    Calendar cal = Calendar.getInstance();
    boolean isWeekend;
    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || 
          cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
         isWeekend = true;
    }
    

    【讨论】:

    • 请在答案中添加一些解释,而不是只提供代码
    • 需要从整个月历中跳过周六和周日,所以我的脚本只在周一至周五调用
    【解决方案4】:

    java.time

        LocalDate today = LocalDate.now(ZoneId.of("Pacific/Wallis"));
        for (LocalDate d = today.withDayOfMonth(1); d.isBefore(today); d = d.plusDays(1)) {
            DayOfWeek dow = d.getDayOfWeek();
            if (! dow.equals(DayOfWeek.SATURDAY) && ! dow.equals(DayOfWeek.SUNDAY)) {
                id("prevDayTrackButton").click();
                TimeUnit.SECONDS.sleep(1);
            }
        }
    

    如果你喜欢使用流操作:

        today.withDayOfMonth(1)
                .datesUntil(today)
                .filter(d -> ! d.getDayOfWeek().equals(DayOfWeek.SATURDAY)
                                && ! d.getDayOfWeek().equals(DayOfWeek.SUNDAY))
                .forEach(d -> {
                    id("prevDayTrackButton").click();
                    TimeUnit.SECONDS.sleep(1);
                });
    

    不过,在这种情况下,我认为它不会给我们带来任何好处。

    您使用的Calendar 类早已过时且设计不佳。相反,我使用的是现代 Java 日期和时间 API java.time。

    链接: Oracle tutorial: Date Time 解释如何使用 java.time。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2019-10-25
      • 2020-11-08
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2014-01-20
      相关资源
      最近更新 更多