java跳过法定节假⽇和双休
注意:五⼀假期的5天规则还需要算⼀下。直接拿过去即可使⽤
import ParseException;
import SimpleDateFormat;
import Calendar;
import Date;
public class Lunar {
private int year;
private int month;
private int day;专插本
private boolean leap;
final static String chineseNumber[]={"⼀","⼆","三","四","五","六","七","⼋","九","⼗","⼗⼀","⼗⼆"};
static SimpleDateFormat chineseDateFormat =new SimpleDateFormat("yyyy年MM⽉dd⽇");
final static long[] lunarInfo =new long[]{0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0, 0x09ad0,0x055d2,0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977, 0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,0x06566,0x0d4a0, 0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,0x0d4a0,0x1d8a6,0x0b550,0x056a0, 0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573, 0x052d0,0x0a9a8,0x0e950,0x06aa0,0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950, 0x05b57,0x056a0,0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6, 0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,0x04af5,0x04970, 0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,0x0c960,0x0d954,0x0d4a0,0x0da50, 0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0, 0x0a5b0,0x15176,0x052b0,0x0a930,0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260, 0x0ea65,0x0d530,0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45, 0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0};
// ====== 传回农历 y年的总天数
final private static int yearDays(int y){
int i, sum =348;
for(i =0x8000; i >0x8; i >>=1){
if((lunarInfo[y -1900]& i)!=0)
sum +=1;
}
return(sum +leapDays(y));
上海市装修公司}
// ====== 传回农历 y年闰⽉的天数
final private static int leapDays(int y){
if(leapMonth(y)!=0){
if((lunarInfo[y -1900]&0x10000)!=0)
return30;
else
return29;
}else
return0;
}
// ====== 传回农历 y年闰哪个⽉ 1-12 , 没闰传回 0
final private static int leapMonth(int y){
return(int)(lunarInfo[y -1900]&0xf);
}
// ====== 传回农历 y年m⽉的总天数
final private static int monthDays(int y,int m){
if((lunarInfo[y -1900]&(0x10000>> m))==0)
return29;
else
return30;
}
// ====== 传回农历 y年的⽣肖
// ====== 传回农历 y年的⽣肖
final public String animalsYear(){
final String[] Animals =new String[]{"⿏","⽜","虎","兔","龙","蛇","马","⽺","猴","鸡","狗","猪"};
return Animals[(year -4)%12];
}
// ====== 传⼊⽉⽇的offset 传回⼲⽀, 0=甲⼦
final private static String cyclicalm(int num){
final String[] Gan =new String[]{"甲","⼄","丙","丁","戊","⼰","庚","⾟","壬","癸"};
final String[] Zhi =new String[]{"⼦","丑","寅","卯","⾠","巳","午","未","申","⾣","戌","亥"};
return(Gan[num %10]+ Zhi[num %12]);
}
// ====== 传⼊ offset 传回⼲⽀, 0=甲⼦
final public String cyclical(){
int num = year -1900+36;
return(cyclicalm(num));
}
public Lunar(boolean leap){
this.leap = leap;
}
/**
* 传出y年m⽉d⽇对应的农历. yearCyl3:农历年与1864的相差数 ? monCyl4:从1900年1⽉31⽇以来,闰⽉数 * dayCyl5:与1900年1⽉31⽇相差的天数,再加40 ?
*
* @param cal
* @return
*/
public Lunar(Calendar cal){
int yearCyl, monCyl, dayCyl;
int leapMonth =0;
Date baseDate =null;
try{
baseDate = chineseDateFormat.parse("1900年1⽉31⽇");
}catch(ParseException e){
e.printStackTrace();// To change body of catch statement use
// Options | File Templates.
}
/
/ 求出和1900年1⽉31⽇相差的天数
int offset =(int)((Time().getTime()- Time())/86400000L);
dayCyl = offset +40;
monCyl =14;
// ⽤offset减去每农历年的天数
// 计算当天是农历第⼏天
// i最终结果是农历的年份
// offset是当年的第⼏天
int iYear, daysOfYear =0;
for(iYear =1900; iYear < 2050 && offset >0; iYear++){
daysOfYear =yearDays(iYear);
offset -= daysOfYear;
monCyl +=12;
}
if(offset <0){
offset += daysOfYear;
iYear--;
monCyl -=12;
}
// 农历年份
year = iYear;
yearCyl = iYear -1864;
leapMonth =leapMonth(iYear);// 闰哪个⽉,1-12
leap =false;
leap =false;
// ⽤当年的天数offset,逐个减去每⽉(农历)的天数,求出当天是本⽉的第⼏天
int iMonth, daysOfMonth =0;
for(iMonth =1; iMonth < 13 && offset >0; iMonth++){
// 闰⽉
if(leapMonth >0&& iMonth ==(leapMonth +1)&&!leap){
--iMonth;
leap =true;
daysOfMonth =leapDays(year);
}else
daysOfMonth =monthDays(year, iMonth);
offset -= daysOfMonth;
中秋节法定假日几天// 解除闰⽉
if(leap && iMonth ==(leapMonth +1))
leap =false;
if(!leap)
monCyl++;
}
// offset为0时,并且刚才计算的⽉份是闰⽉,要校正
if(offset ==0&& leapMonth >0&& iMonth == leapMonth +1){
if(leap){
leap =false;
}else{
leap =true;
--iMonth;
--monCyl;
}
}
// offset⼩于0时,也要校正
if(offset <0){
offset += daysOfMonth;
-
-iMonth;
--monCyl;
}
month = iMonth;
day = offset +1;
}
public static String getChinaDayString(int day){
String chineseTen[]={"初","⼗","廿","卅"};
int n = day %10==0?9: day %10-1;
if(day >30)
return"";
if(day ==10)
return"初⼗";
else
return chineseTen[day /10]+ chineseNumber[n];
}
public String toString(){
return year +"年"+(leap ?"闰":"")+ chineseNumber[month -1]+"⽉"+getChinaDayString(day); }
public static void calcuLunar(Calendar cal,int month,int day, Lunar l){
Lunar lunar =new Lunar(cal);
h != month){
cal.add(Calendar.MONTH,1);
calcuLunar(cal, month, day, l);
}
if(lunar.day != day && l.isLeap()){
if(lunar.day > day){
cal.add(Calendar.DAY_OF_YEAR,-1);
}else{
cal.add(Calendar.DAY_OF_YEAR,1);
cal.add(Calendar.DAY_OF_YEAR,1);
}
calcuLunar(cal, month, day, l);
if(l.isLeap()){
农村如何创业
l.setLeap(false);
}
}
}
public static void main(String[] args){
Calendar cal = Instance();
安能物流快递查询SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
try{
cal.setTime(sdf.parse("2021-5-5"));
}catch(ParseException e){
e.printStackTrace();
}
calcuLunar(cal,5,5,new Lunar(true));
System.out.println("⽇期是:"+((Calendar.MONTH)+1)+"⽉"+ (Calendar.DAY_OF_MONTH)+"⽇"); }
public int getYear(){
return year;
}
public void setYear(int year){
}
public int getMonth(){
return month;
}
public void setMonth(int month){
}
public int getDay(){
return day;
}
public void setDay(int day){
this.day = day;
}
public boolean isLeap(){
return leap;
}
public void setLeap(boolean leap){
this.leap = leap;
}
/*
* public static void main(String[] args) { Calendar
* Instance(); SimpleDateFormat sdf=new
* SimpleDateFormat("yyyy年MM⽉dd⽇"); cal.Default());
* System.out.println("公历⽇期:"+sdf.Time())); Lunar lunar=new
* Lunar(cal); System.out.print("农历⽇期:"); System.out.ar+"年 ");
* System.out.h+"⽉ ");
* System.out.print(getChinaDayString(lunar.day));
* System.out.println("*************"); System.out.println(lunar); }
*/
/*
* public static void main(String[] args) throws ParseException { Calendar
* public static void main(String[] args) throws ParseException { Calendar
* today = Instance();
* today.setTime(chineseDateFormat.parse("2007年11⽉6⽇")); Lunar lunar = new
* Lunar(today); System.out.println("北京时间:" +
* chineseDateFormat.Time()) + " 农历" + lunar); }
*/
}
import DateUtils;
import ParseException;
import SimpleDateFormat;
import ArrayList;
import Calendar;
import Date;
import HashMap;
import LinkedHashMap;
import List;
import Set;
/**
* 从12⽉1号起计算⼀年中的假期
*/
public class VacationDayCalculate {
事业祝福语// 3天节假⽇规则=节⽇在周⼏,放假⽇在周⼏_放假之前的多少天上班_放假后的多少天上班;
private String vacationWeek ="1,6-7-1_0_0;2,7-1-2_1_0;3,1-2-3_2_0;4,4-5-6_0_1;5,5-6-7_0_0;6,6-7-1_0_0;7,6-7-1_0_0"; // 7天节假⽇规则=节⽇在周⼏,放假之前的多少天上班_放假后的多少天上班;
private String vacationMax ="1,2_0;2,2_0;3,3_0;4,0_3;5,0_2;6,0_2;7,1_1";
//5天节假⽇规则
private String vacationLabour ="3,1-2-3_3_1;4,4-5-6_3_3;5,5-6-7_5_4;6,6-7-1_6_3";
/**
* ⼀个时间集合,放假则为true,⼯作⽇为false 放假包括国家法定节假⽇和双休⽇
*/
public HashMap<String, Boolean>yearVacationDay(Integer year){
HashMap<String, Boolean> dates =weekVacation(year -1);
// 3天假⽇在周⼏放假规则
HashMap<Integer, String> weeks =new HashMap<>();
String[] weeksTemp = vacationWeek.split(";");
for(String weekStr : weeksTemp){
String[] week = weekStr.split(",");
weeks.put(Integer.parseInt(week[0]), week[1]);
}
/
/ 元旦节公历⼀⽉⼀⽇,放假3天
String vacationDay = year +"-01-01";
setVacationThreeDay(vacationDay, dates, weeks);
// 清明节(不分⽇历,有规律)年份能整除4的年和下⼀年为4⽉4⽇,再下两年为4⽉5⽇,放假3天
int temp = year &3;
if(temp <2){
vacationDay = year +"-04-04";
}else{
vacationDay = year +"-04-05";
}
setVacationThreeDay(vacationDay, dates, weeks);
/
/ 端午节农历五⽉初五,放假3天
vacationDay =String(),5,5);
setVacationThreeDay(vacationDay, dates, weeks);
// 中秋节农历⼋⽉⼗五,放假3天
vacationDay =String(),8,15);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论