距离节日还有几天java代码_java实现节假日及应休天数计算

这是一个Java程序,用于计算从特定日期开始到结束日期间的工作日和包括周末、法定节假日在内的应休天数。程序首先定义了节假日的起止日期,并通过遍历日期来统计工作日和周末,同时考虑了跨年问题。虽然这个实现没有完全涵盖所有可能的情况,但它提供了一个基础的方法来解决此类问题。
摘要由CSDN通过智能技术生成

需求:可计算实际应休天数,例从6月1日没休息一直干到8月1日,期间经历了周未若干,及法定节假日,需要将周未应补假期及法定节假日假期一同统计出来。

网上找了好多应休天数计算的,都是只计算周未的,都没我要的。 so  自己写了一个。 但这只是个基本实现,没考虑到跨年的问题。

红字部分为此程序的基本思想。

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

/**

*

*/

/**

*

* 文件建立于2009-6-24

*/

public class WorkDay {

/**

* @param args

*/

/*

* 先找时间段内包含的节日,确定节日中是否经历周未

* 如有周未,先计算除周未外的假日天数,最后再计算周未天数

*/

public int ds=3;           //节假日休息天数

Map map1=new HashMap();   //节假日名:起休日期

Map map2=new HashMap();    //起休日期:止休日期

public String st="2009-04-12";

public String et="2009-06-18";

public int jiari=0;

public WorkDay() throws ParseException{

map1.put("5.1", "05-01");

map2.put("05-01", "05-03");

String st1=map1.get("5.1").toString();

String et1=map2.get(st1).toString();

SimpleDateFormat sdf=new SimpleDateFormat("MM-dd");

SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");

SimpleDateFormat sdf3=new SimpleDateFormat("yyyy");

Date sti=sdf.parse(st.substring(5));

Date eti=sdf.parse(et.substring(5));

Date i = sdf.parse(st1);

Date i2= sdf.parse(et1);

/*

* 节日日期需在起休日之后    且   节日多出起停日期的部分也需不计

* 外国的星期一为中国的星期天

*/

if(sdf3.parse(st.substring(0,4)).compareTo(sdf3.parse(et.substring(0,4)))==0){

if(i.after(sti)){ //如果节日起休日在任务日当中

if(i2.before(eti)){  //如果节日休止日在任务日当中

/*

* 同年份,任务起始日和终止日如果跨一个年份的话,可能计算会出现比较大的误差

* 等测试

*/

Calendar ca=Calendar.getInstance();

ca.setTime(sdf2.parse(st.substring(0,5)+st1));

for(int k=0;k

ca.add(Calendar.DAY_OF_MONTH, k);

if(ca.get(Calendar.DAY_OF_WEEK)==7||ca.get(Calendar.DAY_OF_WEEK)==1)

continue;

else jiari++;

}

ca.setTime(sdf2.parse(st));

int xinqi=ca.get(Calendar.DAY_OF_WEEK);

int t1=ca.get(Calendar.DAY_OF_YEAR);

ca.setTime(sdf2.parse(et));

int t2=ca.get(Calendar.DAY_OF_YEAR);

if(xinqi==1){

jiari+=((t2-t1)/7)*2+1;

}else{

jiari+=(t2-t1+1-(7-xinqi+2))*2/7+1;

}

}

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

/*Calendar ca=Calendar.getInstance();

try {

ca.setTime(new SimpleDateFormat("yyyy-MM").parse("2008-02"));

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(ca.getActualMaximum(Calendar.DATE));*/

WorkDay wd=new WorkDay();

System.out.println(wd.jiari);     } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是实现输入年月日,输出距今天还有多少,星期几和是否为公历节日Java 代码: ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; public class DaysUntilToday { public static void main(String[] args) { // 输入年月日 int year = 2022; int month = 1; int day = 1; LocalDate inputDate = LocalDate.of(year, month, day); LocalDate today = LocalDate.now(); // 计算今天还有多少 long daysUntilToday = ChronoUnit.DAYS.between(inputDate, today); System.out.println("距今天还有 " + daysUntilToday + " "); // 计算星期几 String dayOfWeek = inputDate.getDayOfWeek().toString(); System.out.println("星期" + dayOfWeek.substring(0, 1) + dayOfWeek.substring(1).toLowerCase()); // 判断是否为公历节日 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMdd"); String monthDay = inputDate.format(formatter); switch (monthDay) { case "0101": System.out.println("元旦节"); break; case "0214": System.out.println("情人节"); break; case "0401": System.out.println("愚人节"); break; case "0501": System.out.println("劳动节"); break; case "0611": System.out.println("618购物节"); break; case "1001": System.out.println("国庆节"); break; case "1224": case "1225": System.out.println("圣诞节"); break; default: System.out.println("不是公历节日"); break; } } } ``` 以上代码使用了 Java 8 中的 `LocalDate` 类来处理日期,使用 `ChronoUnit.DAYS.between()` 方法计算天数差距,使用 `getDayOfWeek()` 方法计算星期几,使用 `DateTimeFormatter.ofPattern()` 方法格式化月日,最后使用 `switch` 语句判断是否为公历节日
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值