节等法定节假⽇的⽅法...
⼀、前⾔
最近⼯作上遇到⼀个问题,后端有⼀个定时任务,需要⽤JAVA每天判断法定节假⽇、周末放假,上班等情况,其实想单独通过逻辑什么的去判断中国法定节假⽇的放假情况,基本不可能,因为国家每⼀年的假期可能不⼀样,是⼈为设定的;
所以只能依靠其它⼿段,能想到的⽐较靠谱的如下:
1.⽹络接⼝:有些数据服务商会提供,要么是收钱的,要么是次数限制,等等各种问题,效果不理想,可控性差,我也没试过,如:
或者
2.在线解析⽹页信息,获取节假⽇情况:严重依赖被解析的⽹站⽹页,所以在选取⽹站的时候,要稍微靠谱点的;
3.根据国家规定的法定节假⽇放假情况,每年录⼊系统,这种如果客户不怕⿇烦的话。还是⽐较靠谱的;
本Demo将选择第⼆种来实现;
⼆、使⽤htmlunit在线解析⽹页信息,获取节假⽇情况
⼀开始是使⽤jsoup去解析⽹页的,效果不理想,如果⽹页是动态⽣成的时候,⽤jsoup遇到了各种问题,所以改成了htmlunit,总得来说htmlunit还是很强⼤的,能够模拟浏览器运⾏,被誉为java浏览器的开源实现;
⾸先去官⽹下载相关jar包,以及阅读相关⽂档:
我这⾥解析的⽹页是360的万年历:
⽇历界⾯如下:
国庆节朋友圈文案短句被解析的 HTML格式如下:
实现步骤:
1、加载页⾯;
2、循环等待页⾯加载完成(可能会有⼀些动态页⾯,是⽤javascript⽣成);
3、根据⽹页格式解析html内容,并提取关键信息存⼊封装好的对象;
注意点:
1、难点在于判断是否休假及假期类型,由于原页⾯并没有标明每⼀天的假期类型,所以这⾥的逻辑要⾃⼰去实现,详情参考代码;
2、之所以有个静态latestVocationName变量,是防⽌出现以下情况(出现该情况的概率极低;PS:⽅法要每天调⽤⼀次,该变量才⽣效):代码实现:
定义⼀个中国⽇期类:
package ls.getDate;
import java.util.Date;
public class ChinaDate {
/**
* 公历时间
private Date solarDate;
/**
* 农历⽇
*/
private String lunar;
/**
* 公历⽇
*/
private String solar;
/
**
* 是否是 休
*/
private boolean isVacation = false;
/**
* 如果是 休情况下的假期名字
*/
private String VacationName = "⾮假期";
/**
* 是否是 班
*/
private boolean isWorkFlag = false; private boolean isSaturday = false;
private boolean isSunday = false;
/**
* @return the solarDate
*/
public Date getSolarDate() {
return solarDate;
轿车报废年限}
/**
* @param solarDate the solarDate to set */
public void setSolarDate(Date solarDate) {
}
/**
* @return the lunar
*/
public String getLunar() {
return lunar;
}
/**
* @param lunar the lunar to set
*/
public void setLunar(String lunar) {
陶泽如个人资料this.lunar = lunar;
}
/**
* @return the solar
*/
public String getSolar() {
return solar;
}
/**
* @param solar the solar to set
*/
赵本山杀人被抓
public void setSolar(String solar) {
this.solar = solar;
}
/**
* @return the isVacation
*/
public boolean isVacation() {
return isVacation;
}
/**
* @param isVacation the isVacation to set
public void setVacation(boolean isVacation) {
this.isVacation = isVacation;
}
/**
* @return the vacationName
*/
public String getVacationName() {
return VacationName;
}
/**
* @param vacationName the vacationName to set
*/
叶安婷public void setVacationName(String vacationName) { VacationName = vacationName;
}
/**
* @return the isWorkFlag
*/
public boolean isWorkFlag() {
return isWorkFlag;
}
/**
* @param isWorkFlag the isWorkFlag to set
*/
public void setWorkFlag(boolean isWorkFlag) {
this.isWorkFlag = isWorkFlag;暴风眼沉睡者是谁
}
/**
* @return the isSaturday
*/
public boolean isSaturday() {
return isSaturday;
}
* @param isSaturday the isSaturday to set
*/
public void setSaturday(boolean isSaturday) {
this.isSaturday = isSaturday;
}
/**
* @return the isSunday
*/
public boolean isSunday() {
return isSunday;
}
/**
* @param isSunday the isSunday to set
*/
public void setSunday(boolean isSunday) {
this.isSunday = isSunday;
}
}
解析⽹页,并调⽤demo,打印本⽉详情,和当天详情:
package ls.getDate;
import java.io.IOException;
import java.MalformedURLException;
DateFormat;
ParseException;
SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
发布评论