国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法

基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法

2020-03-24 13:33風(fēng)一樣的碼農(nóng) JAVA教程

這篇文章主要介紹了基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法 的相關(guān)資料,需要的朋友可以參考下

一、前言

最近工作上遇到一個(gè)問題,后端有一個(gè)定時(shí)任務(wù),需要用JAVA每天判斷法定節(jié)假日、周末放假,上班等情況,其實(shí)想單獨(dú)通過邏輯什么的去判斷中國法定節(jié)假日的放假情況,基本不可能,因?yàn)閲颐恳荒甑募倨诳赡懿灰粯樱侨藶樵O(shè)定的;

所以只能依靠其它手段,能想到的比較靠譜的如下:

1.網(wǎng)絡(luò)接口:有些數(shù)據(jù)服務(wù)商會(huì)提供,要么是收錢的,要么是次數(shù)限制,等等各種問題,效果不理想,可控性差,我也沒試過,如:

https://www.juhe.cn/docs/api/id/177/aid/601

或者

http://apistore.baidu.com/apiworks/servicedetail/1116.html

2.在線解析網(wǎng)頁信息,獲取節(jié)假日情況:嚴(yán)重依賴被解析的網(wǎng)站網(wǎng)頁,所以在選取網(wǎng)站的時(shí)候,要找稍微靠譜點(diǎn)的;

3.根據(jù)國家規(guī)定的法定節(jié)假日放假情況,每年錄入系統(tǒng),這種如果客戶不怕麻煩的話。還是比較靠譜的;

本Demo將選擇第二種來實(shí)現(xiàn);

二、使用htmlunit在線解析網(wǎng)頁信息,獲取節(jié)假日情況

一開始是使用jsoup去解析網(wǎng)頁的,效果不理想,如果網(wǎng)頁是動(dòng)態(tài)生成的時(shí)候,用jsoup遇到了各種問題,所以改成了htmlunit,總得來說htmlunit還是很強(qiáng)大的,能夠模擬瀏覽器運(yùn)行,被譽(yù)為java瀏覽器的開源實(shí)現(xiàn);

首先去官網(wǎng)下載相關(guān)jar包,以及閱讀相關(guān)文檔:

http://htmlunit.sourceforge.net/

我這里解析的網(wǎng)頁是360的萬年歷:

http://hao.360.cn/rili/

日歷界面如下:

基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法

被解析的 HTML格式如下:

基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法

實(shí)現(xiàn)步驟:

1、加載頁面;

2、循環(huán)等待頁面加載完成(可能會(huì)有一些動(dòng)態(tài)頁面,是用javascript生成);

3、根據(jù)網(wǎng)頁格式解析html內(nèi)容,并提取關(guān)鍵信息存入封裝好的對象;

注意點(diǎn):

1、難點(diǎn)在于判斷是否休假及假期類型,由于原頁面并沒有標(biāo)明每一天的假期類型,所以這里的邏輯要自己去實(shí)現(xiàn),詳情參考代碼;

2、之所以有個(gè)靜態(tài)latestVocationName變量,是防止出現(xiàn)以下情況(出現(xiàn)該情況的概率極低;PS:方法要每天調(diào)用一次,該變量才生效):

基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法

代碼實(shí)現(xiàn):

定義一個(gè)中國日期類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.pichen.tools.getDate;
import java.util.Date;
public class ChinaDate {
/**
* 公歷時(shí)間
*/
private Date solarDate;
/**
* 農(nóng)歷日
*/
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) {
this.solarDate = 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;
}
}

解析網(wǎng)頁,并調(diào)用demo,打印本月詳情,和當(dāng)天詳情:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package com.pichen.tools.getDate;
import java.io.IOException;
import java.net.MalformedURLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.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;
public class Main {
private static String latestVocationName="";
public String getVocationName(DomNodeList<HtmlElement> htmlElements, String date) throws ParseException{
String rst = "";
boolean pastTimeFlag = false;
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date paramDate = dateFormat.parse(date);
if(new Date().getTime() >= paramDate.getTime()){
pastTimeFlag = true;
}
//first step //jugde if can get vocation name from html page
for(int i = 0; i < htmlElements.size(); i++){
HtmlElement element = htmlElements.get(i);
if(element.getAttribute("class").indexOf("vacation")!=-1){
boolean hitFlag = false;
String voationName = "";
for(; i < htmlElements.size(); i++){
HtmlElement elementTmp = htmlElements.get(i);
String liDate = elementTmp.getAttribute("date");
List<HtmlElement> lunar = elementTmp.getElementsByAttribute("span", "class", "lunar");
String lanarText = lunar.get(0).asText();
if(lanarText.equals("元旦")){
voationName = "元旦";
}else if(lanarText.equals("除夕")||lanarText.equals("春節(jié)")){
voationName = "春節(jié)";
}else if(lanarText.equals("清明")){
voationName = "清明";
}else if(lanarText.equals("國際勞動(dòng)節(jié)")){
voationName = "國際勞動(dòng)節(jié)";
}else if(lanarText.equals("端午節(jié)")){
voationName = "端午節(jié)";
}else if(lanarText.equals("中秋節(jié)")){
voationName = "中秋節(jié)";
}else if(lanarText.equals("國慶節(jié)")){
voationName = "國慶節(jié)";
}
if(liDate.equals(date)){
hitFlag = true;
}
if(elementTmp.getAttribute("class").indexOf("vacation")==-1){
break;
}
}
if(hitFlag == true && !voationName.equals("")){
rst = voationName;
break;
}
}else{
continue;
}
}
//if first step fail(rarely), get from the latest Vocation name
if(rst.equals("")){
System.out.println("warning: fail to get vocation name from html page.");
//you can judge by some simple rule
//from the latest Vocation name
rst = Main.latestVocationName;
}else if(pastTimeFlag == true){
//更新《當(dāng)前時(shí)間,且最近一次的可見的假期名
Main.latestVocationName = rst;
}
return rst;
}
public List<ChinaDate> getCurrentDateInfo(){
WebClient webClient = null;
List<ChinaDate> dateList = null;
try{
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
dateList = new ArrayList<ChinaDate>();
webClient = new WebClient();
HtmlPage page = webClient.getPage("http://hao.360.cn/rili/");
//最大等待60秒
for(int k = 0; k < 60; k++){
if(!page.getElementById("M-dates").asText().equals("")) break;
Thread.sleep(1000);
}
//睡了8秒,等待頁面加載完成...,有時(shí)候,頁面可能獲取不到,不穩(wěn)定()
//Thread.sleep(8000);
DomNodeList<HtmlElement> htmlElements = page.getElementById("M-dates").getElementsByTagName("li");
//System.out.println(htmlElements.size());
for(HtmlElement element : htmlElements){
ChinaDate chinaDate = new ChinaDate();
List<HtmlElement> lunar = element.getElementsByAttribute("span", "class", "lunar");
List<HtmlElement> solar = element.getElementsByAttribute("div", "class", "solar");
chinaDate.setLunar(lunar.get(0).asText());
chinaDate.setSolar(solar.get(0).asText());
chinaDate.setSolarDate(dateFormat.parse(element.getAttribute("date")));
if(element.getAttribute("class").indexOf("vacation")!=-1){
chinaDate.setVacation(true);
chinaDate.setVacationName(this.getVocationName(htmlElements, element.getAttribute("date")));
}
if(element.getAttribute("class").indexOf("weekend")!=-1 &&
element.getAttribute("class").indexOf("last")==-1){
chinaDate.setSaturday(true);
}
if(element.getAttribute("class").indexOf("last weekend")!=-1){
chinaDate.setSunday(true);
}
if(element.getAttribute("class").indexOf("work")!=-1){
chinaDate.setWorkFlag(true);
}else if(chinaDate.isSaturday() == false &&
chinaDate.isSunday() == false &&
chinaDate.isVacation() == false ){
chinaDate.setWorkFlag(true);
}else{
chinaDate.setWorkFlag(false);
}
dateList.add(chinaDate);
}
}catch(Exception e){
e.printStackTrace();
System.out.println("get date from http://hao.360.cn/rili/ error~");
}finally{
webClient.close();
}
return dateList;
}
public ChinaDate getTodayInfo(){
List<ChinaDate> dateList = this.getCurrentDateInfo();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
for(ChinaDate date: dateList){
if(dateFormat.format(date.getSolarDate()).equals(dateFormat.format(new Date()))){
return date;
}
}
return new ChinaDate();
}
public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException, InterruptedException {
List<ChinaDate> dateList = new Main().getCurrentDateInfo();
ChinaDate today = new Main().getTodayInfo();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
System.out.println("本月詳情:");
for(ChinaDate date: dateList){
System.out.println(dateFormat.format(date.getSolarDate()) + " " + date.getVacationName());
}
System.out.println("------------------------------------------------------------------------");
System.out.println("今日詳情:");
System.out.println("日期:" + today.getSolarDate());
System.out.println("農(nóng)歷:"+today.getLunar());
System.out.println("公歷:"+today.getSolar());
System.out.println("假期名:"+today.getVacationName());
System.out.println("是否周六:"+today.isSaturday());
System.out.println("是否周日:"+today.isSunday());
System.out.println("是否休假:"+today.isVacation());
System.out.println("是否工作日:"+today.isWorkFlag());
System.out.println("已發(fā)生的最近一次假期:" + Main.latestVocationName);
}
}

運(yùn)行程序,結(jié)果正確:

基于Java代碼實(shí)現(xiàn)判斷春節(jié)、端午節(jié)、中秋節(jié)等法定節(jié)假日的方法

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品欧美一区二区三区 | 中文字幕人成乱码在线观看 | 一区综合 | 午夜成人免费视频 | 精品一区二区三区免费视频 | 在线a人片免费观看视频 | 午夜特片 | 香蕉久久夜色精品国产使用方法 | 综合久久99 | 精品久久久久久久久久久下田 | 日韩中文字幕 | 国产精品国产自产拍高清av | 国产免费一区二区三区最新6 | 久久综合九色综合欧美狠狠 | 中国一极毛片 | 亚洲成人激情在线 | 国产情侣91 | 午夜影院在线播放 | www.国产精品 | 日韩a∨精品日韩在线观看 国产高清视频在线观看 | 成人网视频在线观看 | 亚洲精品成人悠悠色影视 | 欧美视频在线一区 | 亚洲精品久久久久国产 | 性色蜜桃x88av| 日本久久国产 | 久久精品99 | 成人综合网站 | 亚洲欧洲av在线 | 日韩精品| 成人精品福利 | 青娱乐99| av免费网站 | 色站综合 | 91亚洲国产成人久久精品网站 | 91精品国产综合久久久久久丝袜 | 天堂av中文在线 | 精品欧美一区二区三区久久久 | jlzzjlzz国产精品久久 | 国产福利视频在线观看 | 婷婷精品视频 |