java编写全年考勤日历

下面我将详细介绍如何用Java编写全年考勤日历的完整攻略。

1. 设计思路

基本思路是从一年的第一天开始,每一天都计算它是星期几,再根据周末、节假日等情况进行判断,最终输出考勤日历。这个思路分为以下几个步骤:

  1. 获取当前年份,以及这一年有多少天(平年365天,闰年366天)
  2. 从1月1日开始遍历每一天,计算当天是星期几
  3. 判断当天是否是周末,如果是周末则标记为“休息日”,否则标记为“工作日”
  4. 根据节假日调整考勤日历,如国庆节、春节等

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技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • java实现基于UDP协议的聊天小程序操作

    Java实现基于UDP协议的聊天小程序操作攻略 本攻略将介绍如何使用Java语言实现基于UDP协议的聊天小程序操作,包括构建UDP数据报文,实现消息的发送和接收等。 步骤一、创建UDP通信 首先,需要创建UDP通信的Socket,使用Java自带的DatagramSocket类即可。代码如下: DatagramSocket socket = new Data…

    Java 2023年5月23日
    00
  • Mybatis表的关联查询详情

    您想了解“Mybatis表的关联查询详情”的完整攻略,以下是详细介绍。 Mybatis表的关联查询详情 在实际开发中,一个业务往往需要从多张表中查询数据并进行关联,这时候就需要使用表的关联查询。在 Mybatis 中,我们通常使用 XML 映射文件来实现表的关联查询。 一对一关联查询 一对一关联查询就是在两张表中建立一个一对一的关系,并且查询的两张表有主从关…

    Java 2023年5月20日
    00
  • Java框架—Spring详解

    Java框架—Spring详解 什么是Spring框架 Spring框架是一个面向对象的Java应用程序开发框架,它通过IoC(依赖注入)和AOP(面向切面编程)实现了高内聚、松耦合的代码设计。 Spring框架可以用来构建各种类型的应用程序,包括Web应用程序、企业应用程序、桌面应用程序等。它被广泛地应用于商业应用开发领域,因为它可以极大地提高开发效率…

    Java 2023年5月19日
    00
  • struts2实现多文件上传

    首先,要实现多文件上传,需要在前端使用表单,并且表单中需要添加一个 enctype=”multipart/form-data” 的属性,才能够让文件被正确解析和上传。同时,需要使用 type=”file” 的 <input> 标签来让用户选择文件。 在Struts2中,可以使用 org.apache.struts2.dispatcher.mult…

    Java 2023年5月20日
    00
  • Mybatis配置错误:java.lang.ExceptionInInitializerError

    当我们在使用Mybatis进行数据库操作时,有时候会遇到一些错误,其中之一就是”Mybatis配置错误:java.lang.ExceptionInInitializerError”。这个错误通常表示在初始化时发生了异常。在处理这个错误之前,我们需要了解一些Mybatis的基本配置和工作原理。 Mybatis基本配置 Mybatis的配置文件是mybatis-…

    Java 2023年5月20日
    00
  • 一文掌握IDEA中的Maven集成与创建

    下面我将详细讲解“一文掌握IDEA中的Maven集成与创建”的完整攻略。 IDEA中Maven集成 第一步:安装Maven 打开IDEA,选择Preferences,然后在搜索框中输入Maven,找到Maven设置选项,查看当前是否已经安装了Maven,如果没有,请点击“+”来安装Maven。 第二步:创建Maven项目 在IDEA中选择“新建项目” -&g…

    Java 2023年5月20日
    00
  • java 实现下压栈的操作(能动态调整数组大小)

    实现下压栈的操作是实现栈数据结构的一种方式,下面是如何用Java实现这种操作,同时可以动态调整数组大小。 实现步骤 定义一个类来存储栈的操作。 在该类中创建一个数组来存储栈的元素。 创建一个变量来存储栈中元素的数量。 实现一个方法push(),将元素压入栈中。如果数组已满,则将数组的大小扩大一倍。将新元素添加到数组的结尾。 实现一个方法pop(),将栈顶元素…

    Java 2023年5月26日
    00
  • Java对象传递与返回的细节问题详析

    关于Java对象的传递和返回,我们需要注意以下细节问题。 Java对象传递的细节问题 在Java中,我们可以将对象作为参数传递给方法,这种传递方式是引用传递。即方法得到的是对象的地址,我们通过地址来操作这个对象。在这个过程中,如果对象被修改了,那么原对象也会相应的被修改。 示例一: public class Student { String name; in…

    Java 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部