仅打印工作日
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.
非常感谢大家的帮助,现在终于可以继续了:>
在过去的 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.
非常感谢大家的帮助,现在终于可以继续了:>