仅打印工作日

Printing only business working days

在过去的 4 个小时里,我一直在这个问题上徘徊,尝试了不同的策略,但在检查了这里和 Google 上的无数帖子后,这些策略并没有取得多大的成功。基本上我想做的是只打印出周一至周五一周内的工作日。每次周末出现时,我都尝试增加一年中的某一天,但这当然会打乱之后几天的顺序。例如,而不是:

 Iteration: 0, 1, 2, 3, 4, 5, 6, 7, 8....

 Day: (0)Friday, (1)Saturday, (2)Sunday, (3)Monday, (4)Tuesday, (5)Wednesday, (6)Thursday, (7)Friday, (8)Saturday....etc

我需要:

   Day: (0)Friday, (1)Monday, (2)Tuesday (3)Wednesday, (4)Thursday, (5)Friday, (6)Monday, (7)Tuesday, (8)Wednesday....etc

代码如下:

public static void date(int day) {
    now = Calendar.getInstance();
    //SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");//version 1
    SimpleDateFormat format = new SimpleDateFormat("EEEE d MMMM yyyy"); //version 2

    String[] days = new String[maxDayCount];      //limits the number of days to print out(ordinarily h)
    now.add(Calendar.DAY_OF_YEAR, day + 1);     //Increments from test count + 1 due to count starting at 0 (would be today). Increments the date to get from today.

    int DayOfWeek = now.get(Calendar.DAY_OF_WEEK);
    boolean WorkingDayCheck = ((DayOfWeek >= Calendar.MONDAY) && (DayOfWeek <= Calendar.FRIDAY));

    if(WorkingDayCheck) {
        days[day] = format.format(now.getTime());
    } else {
      //
    }
    now.add(Calendar.DAY_OF_MONTH, 1);
    System.out.println("-----------Day " + day + ": " + String.valueOf(days[day]));    //v2: print out each line
}//END OF METHOD: date

我的想法是,我在其他地方进行了一次迭代,将日期编号传递给此方法,以便使用该日期打印出日期。我现在回到原来的状态,然后再尝试一些事情,目前我正在使用 WorkingDayCheck 布尔值进行检查,当周末到来时,打印输出当然会返回 null。

伙计们有什么想法吗? 谢谢你的时间。

我想这会解决你的问题。

首先,为什么每次进入方法时都定义数组days,然后只填充其中一个值?

你的String[] days = new String[maxDayCount];应该是成员变量而不是局部变量。所以在这个方法之外初始化这个数组。

同时初始化另一个 int 代表数组中最后一个空位置。 (默认为 0

public class Foo {
  int maxDayCount = 365;
  String[] days = new String[maxDayCount];
  int finalIndex = 0;

  public static void date(int day) {
    now = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat("EEEE d MMMM yyyy");

    String[] days = new String[maxDayCount];      //limits the number of days to print out(ordinarily h)
    now.add(Calendar.DAY_OF_YEAR, day + 1);     //Increments from test count + 1 due to count starting at 0 (would be today). Increments the date to get from today.

    int DayOfWeek = now.get(Calendar.DAY_OF_WEEK);
    boolean WorkingDayCheck = ((DayOfWeek >= Calendar.MONDAY) && (DayOfWeek <= Calendar.FRIDAY));

    if(WorkingDayCheck) {
        days[finalIndex++] = format.format(now.getTime());
        System.out.print("(" + (finalIndex - 1) + ")" + String.valueOf(days[finalIndex - 1]))
    } else {
      //
    }
  }
  public static void main(String[]args) {
    int day = 0;
    while(finalIndex != maxDaysCount) {
      date(day++);
    }
  }
}

现在您的 days 数组将仅在各自的索引中填充工作日。例如,在 days[0] 中将是 Friday 然后 days[1] 将是 Saturday 等等,因为你有一个指针 finalIndex 独立于 [= 的值21=] 从迭代中输入到您的方法。

如果我正确地解决了你的问题,你想像下面那样做,

Working Day #1 = 0 Week + 1 Day = 1st Day
..
Working Day #5 = 0 Week + 5 Days = 5th Day
Working Day #6 = 1 Week + 1 Day = 8th Day
..
Working Day #10 = 1 Week + 5 Days = 12th Day

然后打印一年中的第 1、2、3 个日历日。

如果是这种情况,您可以尝试从工作日中查找日历日,



    int div = day/5;
    int rem = day%5;
    int calendarDay = 0;
    if(day>5){
        if(rem == 0)
            calendarDay = (div-1)*7 + 5;
        else
            calendarDay = div*7 + rem;
    }else
        calendarDay = day;

然后找到该日期的日历日,例如



    Calendar calendar = new GregorianCalendar();
    calendar.set(Calendar.DAY_OF_YEAR, day);
    StringBuilder sb = new StringBuilder();
    Formatter formatter = new Formatter(sb, Locale.ENGLISH);
    formatter.format("%tD", calendar);
    System.out.println(sb);

代码不是解决方案,但我想它指向了你想去的地方。

玩弄代码后,我实现了现在的目标:

    public static String getDate4(int day) {
       now = Calendar.getInstance();
       //SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");//version 1
       SimpleDateFormat format = new SimpleDateFormat("EEEE d MMMM yyyy"); //version 2

       now.add(Calendar.DAY_OF_YEAR, day + 1);     //Increments from test count + 1 due to count starting at 0 (would be today). Increments the date to get from today.

       int DayOfWeek = now.get(Calendar.DAY_OF_WEEK);
       boolean WorkingDayCheck = ((DayOfWeek >= Calendar.MONDAY) && (DayOfWeek <= Calendar.FRIDAY));

       if(WorkingDayCheck) {
            days[finalIndex++] = format.format(now.getTime());
        return "\n(" + (finalIndex - 1) + ") " + String.valueOf(days[finalIndex - 1]);
        } else {
            now.add(Calendar.DATE, 2);  //advance dates by two
            dayCount = dayCount + 2;    //Increase the day count by 2 to ensure that later dates are also incremented to avoid duplication i.e. Monday(Sat), Tuesday(Sun), Monday, Tuesday, Wed...
            days[finalIndex++] = format.format(now.getTime());
          return "\n(" + (finalIndex - 1) + ") " + String.valueOf(days[finalIndex - 1]);
       }//END OF if else
    }//END OF getDate4 method

我必须添加并使用一个外部 dayCount(类似于 @Mohammed Osama 使用的 day int),与我之前用于输入此方法的主要方法迭代中使用的计数分开,然后在周末到来时使用up 我将日期增加了 2,这是我之前尝试过的,但是当周末结束时问题就来了,它又回到了非周末日期,结果是:

Friday
Monday (previously Saturday)
Tuesday (previously Sunday)
Monday (weekend over, now back onto Monday) <--- Issue here and onwards
Tuesday

这是新的 dayCount 出现的地方,它现在被简单地输入到这个方法中:

//Main method
//Iteration code start
getDate4(dayCount++);
//Iteration end

每次遇到周末时将此值增加 2 会将较晚的日期推到适当的位置,因此现在我得到了我一直以来的状态:

Friday
Monday (previously Saturday) <-Pushed ahead by 2 dates to Monday
Tuesday (previously Sunday)  <-Pushed ahead by 2 dates to Tuesday
Wednesday (previously Monday) <-Pushed ahead 2 dates to Wednesday due to weekends incrementing the dayCount by 2
Thursday <--- etc. etc.

非常感谢大家的帮助,现在终于可以继续了:>