java 判定法定休假日

package com.xxtx.wisdom.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

/**
 * 获取当年中国的法定节假日和工作日等信息。 如下是当前包含的功能:
 * 01-给定日期,判断是否是法定节假日。
 * 02-给定日期,判断是否是周末(周末不一定是休息日,可能需要补班)。 
 * 03-给定日期,判断是否是需要额外补班的周末。
 * 04-给定日期,判断是否是休息日(包含法定节假日和不需要补班的周末)。 
 * 05-给定日期,判断是否是工作日(非休息日)。
 * 06-获取一年中总共的天数。
 * 07-获取一年中法定节假日的天数。 
 * 08-获取一年中需要补班的周末天数。 
 * 09-获取一年中周末的天数(周六+周日)。
 * 10-获取一年中休息日的天数(法定节假日+不需要补班的周末)。
 * 
 */

public class ChineseWorkDay {
	private  String calendar;
	private  Date date;
	public ChineseWorkDay(Date date){
		 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		 this.calendar= sdf.format(date);
		 this.date = date;
	}
    // 法律规定的放假日期
    private List<String> lawHolidays = new ArrayList<String>(Arrays.asList(
            "2017-01-01", "2017-01-02", "2017-01-27", "2017-01-28",
            "2017-01-29", "2017-01-30", "2017-01-31", "2017-02-01",
            "2017-02-02", "2017-04-02", "2017-04-03", "2017-04-04",
            "2017-04-29", "2017-04-30", "2017-05-01", "2017-05-28",
            "2017-05-29", "2017-05-30", "2017-10-01", "2017-10-02",
            "2017-10-03", "2017-10-04", "2017-10-05", "2017-10-06",
            "2017-10-07", "2017-10-08"));
    // 由于放假需要额外工作的周末
    private List<String> extraWorkdays = new ArrayList<String>(Arrays.asList(
            "2017-01-22", "2017-02-04", "2017-04-01", "2017-05-27",
            "2017-09-30"));

    /**
     * 判断是否是法定假日
     * 
     * @param calendar
     * @return
     * @throws Exception
     */
    public boolean isLawHoliday() throws Exception {
       
        if (lawHolidays.contains(calendar)) {
            return true;
        }
        return false;
    }

    /**
     * 判断是否是周末
     * 
     * @param calendar
     * @return
     * @throws ParseException
     */
    public boolean isWeekends() throws Exception {      
       
        Calendar ca = Calendar.getInstance();
        ca.setTime(date);
        if (ca.get(Calendar.DAY_OF_WEEK) == 1
                || ca.get(Calendar.DAY_OF_WEEK) == 7) {
            return true;
        }
        return false;
    }

    /**
     * 判断是否是需要额外补班的周末
     * 
     * @param calendar
     * @return
     * @throws Exception
     */
    public boolean isExtraWorkday() throws Exception {       
        if (extraWorkdays.contains(calendar)) {
            return true;
        }
        return false;
    }

    /**
     * 判断是否是休息日(包含法定节假日和不需要补班的周末)
     * 
     * @param calendar
     * @return
     * @throws Exception
     */
    public boolean isHoliday() throws Exception {
       
        // 首先法定节假日必定是休息日
        if (this.isLawHoliday()) {
            return true;
        }
        // 排除法定节假日外的非周末必定是工作日
        if (!this.isWeekends()) {
            return false;
        }
        // 所有周末中只有非补班的才是休息日
        if (this.isExtraWorkday()) {
            return false;
        }
        return true;
    }

    /**
     * 判断是否是工作日
     * 
     * @param calendar
     * @return
     * @throws Exception
     */
    public boolean isWorkday() throws Exception {
       
        return !(this.isHoliday());
    }

    public int getTotalDays() {
        return new GregorianCalendar().isLeapYear(Calendar.YEAR) ? 366 : 365;
    }

    public int getTotalLawHolidays() {
        return lawHolidays.size();
    }

    public int getTotalExtraWorkdays() {
        return extraWorkdays.size();
    }

    /**
     * 获取一年中所有周末的天数
     * @return
     */
    public int getTotalWeekends() {
        List<String> saturdays = new ArrayList<String>();
        List<String> sundays = new ArrayList<String>();
        Calendar calendar = Calendar.getInstance();
        int currentYear = calendar.get(Calendar.YEAR);
        int nextYear = 1 + calendar.get(Calendar.YEAR);
        Calendar cstart = Calendar.getInstance();
        Calendar cend = Calendar.getInstance();
        cstart.set(currentYear, 0, 1);// 今年的元旦
        cend.set(nextYear, 0, 1);// 明年的元旦
        return this.getTotalSaturdays(saturdays, calendar, cstart, cend,
                currentYear)
                + this.getTotalSundays(sundays, calendar, cstart, cend,
                        currentYear);
    }

    private int getTotalSaturdays(List<String> saturdays, Calendar calendar,
            Calendar cstart, Calendar cend, int currentYear) {
        // 将日期设置到上个周六
        calendar.add(Calendar.DAY_OF_MONTH, -calendar.get(Calendar.DAY_OF_WEEK));
        // 从上周六往这一年的元旦开始遍历,定位到去年最后一个周六
        while (calendar.get(Calendar.YEAR) == currentYear) {
            calendar.add(Calendar.DAY_OF_YEAR, -7);
        }
        // 将日期定位到今年第一个周六
        calendar.add(Calendar.DAY_OF_YEAR, 7);
        // 从本年第一个周六往下一年的元旦开始遍历
        for (; calendar.before(cend); calendar.add(Calendar.DAY_OF_YEAR, 7)) {
            saturdays.add(calendar.get(Calendar.YEAR) + "-"
                    + calendar.get(Calendar.MONTH) + "-"
                    + calendar.get(Calendar.DATE));
        }
        return saturdays.size();
    }

    private int getTotalSundays(List<String> sundays, Calendar calendar,
            Calendar cstart, Calendar cend, int currentYear) {
        // 将日期设置到上个周日
        calendar.add(Calendar.DAY_OF_MONTH,
                -calendar.get(Calendar.DAY_OF_WEEK) + 1);
        // 从上周日往这一年的元旦开始遍历,定位到去年最后一个周日
        while (calendar.get(Calendar.YEAR) == currentYear) {
            calendar.add(Calendar.DAY_OF_YEAR, -7);
        }
        // 将日期定位到今年第一个周日
        calendar.add(Calendar.DAY_OF_YEAR, 7);
        // 从本年第一个周日往下一年的元旦开始遍历
        for (; calendar.before(cend); calendar.add(Calendar.DAY_OF_YEAR, 7)) {
            sundays.add(calendar.get(Calendar.YEAR) + "-"
                    + calendar.get(Calendar.MONTH) + "-"
                    + calendar.get(Calendar.DATE));
        }
        return sundays.size();
    }

    public int getTotalHolidays(){
        //先获取不需要补班的周末天数
        int noWorkWeekends = this.getTotalWeekends() - this.getTotalExtraWorkdays();
        return noWorkWeekends + this.getTotalLawHolidays();
    }

    public static void main(String[] args) throws Exception {
       
        ChineseWorkDay cc = new ChineseWorkDay(new Date());
        System.out.println("是否是法定节假日:" + cc.isLawHoliday());
        System.out.println("是否是周末:" + cc.isWeekends());
        System.out.println("是否是需要额外补班的周末:" + cc.isExtraWorkday());
        System.out.println("是否是休息日:" + cc.isHoliday());
        System.out.println("是否是工作日:" + cc.isWorkday());
        System.out.println("今年总共有" + cc.getTotalDays() + "天");
        System.out.println("今年总共有" + cc.getTotalLawHolidays() + "天法定节假日");
        System.out.println("今年总共有" + cc.getTotalExtraWorkdays() + "天需要补班的周末");
        System.out.println("今年总共有" + cc.getTotalWeekends() + "天周末");
        System.out.println("今年总共有" + cc.getTotalHolidays() + "天休息日");
    }

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要判断一个文件是否加密,可以利用Java的文件操作和加密解密的相关类库。 首先,使用Java的文件操作类,比如FileInputStream来读取文件的内容,并将文件的字节码保存到一个byte数组中。 然后,可以使用Java的加密解密类库,比如javax.crypto.Cipher来尝试对byte数组进行解密操作。如果解密成功,说明文件是加密的。 具体的步骤如下: 1. 使用FileInputStream打开待判断的文件,将其内容读取到一个byte数组中。 ```java FileInputStream fis = new FileInputStream("path/to/file"); byte[] fileBytes = new byte[(int) file.length()]; fis.read(fileBytes); fis.close(); ``` 2. 根据加密算法创建一个Cipher对象,用于解密。 ```java String algorithm = "AES"; // 替换成实际使用的加密算法 Cipher cipher = Cipher.getInstance(algorithm); ``` 3. 调用Cipher对象的doFinal方法进行解密,并捕获解密可能抛出的异常。 ```java try { byte[] decryptedBytes = cipher.doFinal(fileBytes); // 解密成功,文件是加密的 System.out.println("文件是加密的"); } catch (Exception e) { // 解密失败,文件不是加密的 System.out.println("文件不是加密的"); } ``` 注意:上述代码只是一个示例,具体的加密解密算法和密钥需要根据实际情况进行调整。另外,需要引入相应的加密解密类库,比如Bouncy Castle等。 综上所述,通过Java的文件操作类和加密解密类库,可以判断一个文件是否加密。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值