下面我将详细介绍如何用Java编写全年考勤日历的完整攻略。
1. 设计思路
基本思路是从一年的第一天开始,每一天都计算它是星期几,再根据周末、节假日等情况进行判断,最终输出考勤日历。这个思路分为以下几个步骤:
- 获取当前年份,以及这一年有多少天(平年365天,闰年366天)
- 从1月1日开始遍历每一天,计算当天是星期几
- 判断当天是否是周末,如果是周末则标记为“休息日”,否则标记为“工作日”
- 根据节假日调整考勤日历,如国庆节、春节等
2. Java实现方法
这里我们使用Java语言来实现这个计算。Step by Step:
Step 1 获取当前年份
int year = Calendar.getInstance().get(Calendar.YEAR);
Step 2 计算这一年有多少天
int daysOfYear = year % 400 == 0 || year % 4 == 0 && year % 100 != 0 ? 366 : 365;
Step 3 遍历每一天,计算是星期几,判断是否是周末
import java.util.Calendar;
public class AttendanceCalendar {
public static void main(String[] args) {
int year = Calendar.getInstance().get(Calendar.YEAR);
int daysOfYear = year % 400 == 0 || year % 4 == 0 && year % 100 != 0 ? 366 : 365;
int dayOfWeek;//星期几,用1-7表示(1表示星期天,7表示星期六)
for (int i = 1; i <= daysOfYear; i++) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.DAY_OF_YEAR, i);
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);//获取星期几,1表示星期天,7表示星期六
String date = year + "年" + i + "日";//构建日期字符串,用于输出
if (dayOfWeek == 1 || dayOfWeek == 7) {//周六、周日
System.out.println(date + " 休息");//周末休息
} else {
System.out.println(date + " 上班");//工作日
}
}
}
}
示例输出:
2021年1日 上班
2021年2日 上班
2021年3日 上班
2021年4日 上班
2021年5日 上班
2021年6日 上班
2021年7日 休息
2021年8日 休息
2021年9日 上班
...
2021年355日 上班
2021年356日 上班
2021年357日 上班
2021年358日 上班
2021年359日 上班
2021年360日 上班
2021年361日 上班
2021年362日 上班
2021年363日 上班
2021年364日 上班
2021年365日 上班
Step 4 根据节假日调整考勤日历
对于节假日,可以使用Java内置的HashMap存储节日以及对应的日期;对于调休,可以手动修改考勤日历输出。
这里以国庆节调休为例示例调休,需要先在HashMap中将国庆节标记上,以及将节假日调整为周末,再进行输出。
import java.util.Calendar;
import java.util.HashMap;
public class AttendanceCalendar {
public static void main(String[] args) {
int year = Calendar.getInstance().get(Calendar.YEAR);
int daysOfYear = year % 400 == 0 || year % 4 == 0 && year % 100 != 0 ? 366 : 365;
int dayOfWeek;
HashMap<String, Integer> holidays = new HashMap<>();
holidays.put("元旦", 1);
holidays.put("除夕", 0);//除夕用0表示
holidays.put("春节", 1);
holidays.put("清明节", 4);
holidays.put("劳动节", 1);
holidays.put("端午节", 1);
holidays.put("中秋节", 3);
holidays.put("国庆节", 7);//国庆放七天
for (int i = 1; i <= daysOfYear; i++) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.DAY_OF_YEAR, i);
int month = cal.get(Calendar.MONTH) + 1;//获取月份,用于处理节日的调休
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
String date = year + "年" + i + "日";
if (dayOfWeek == 1 || dayOfWeek == 7) {//周末休息
System.out.println(date + " 休息");
} else {
if (holidays.containsValue(i)) {
if (month == 10 && i == 8) {// 检查国庆节前后是否需要调休
System.out.println(date + " 休息");//国庆节放七天
for (int j = 1; j <= 7; j++) {
cal.set(Calendar.DAY_OF_YEAR, i + j);
System.out.println((year + "年" + (i + j) + "日") + " 休息");//国庆节放七天
}
} else {
System.out.println(date + " 休息");//节日休息
}
} else {
System.out.println(date + " 上班");//正常上班
}
}
}
}
}
示例输出:
2021年1日 上班
2021年2日 上班
2021年3日 上班
2021年4日 上班
2021年5日 上班
2021年6日 上班
2021年7日 休息
2021年8日 休息
2021年9日 上班
...
2021年30日 休息
2021年31日 休息
2021年32日 休息
2021年33日 休息
2021年34日 休息
2021年35日 休息
2021年36日 休息
以上是Java编写全年考勤日历的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java编写全年考勤日历 - Python技术站