java处理节假日和工作时间的工具类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List; /**
* 节假日工作时间处理
* 假日只处理今年、去年的 1.1、5.1、10.1,和周末
*/
public class HolidayUtil { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static List<String> holidays = new ArrayList<String>(); /**
* 静态块初始化法定节日
*/
static {
Calendar c = Calendar.getInstance();
holidays.add(c.get(Calendar.YEAR)-1 + "-01-01");
holidays.add(c.get(Calendar.YEAR)-1 + "-05-01");
holidays.add(c.get(Calendar.YEAR)-1 + "-10-01");
holidays.add(c.get(Calendar.YEAR) + "-01-01");
holidays.add(c.get(Calendar.YEAR) + "-05-01");
holidays.add(c.get(Calendar.YEAR) + "-10-01");
} /**
* 判断当天是否是节假日 节日只包含1.1;5.1;10.1
*
* @param date 时间
* @return 非工作时间:true;工作时间:false
*/
public static boolean isHolidayOrFestival(Date date) {
boolean result = false;
boolean isHolidayTmp = isHoliday(date);
if (isHolidayTmp) {
result = true;
} else {
Calendar c = Calendar.getInstance();
c.setTime(date);
//周末直接为非工作时间
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
result = true;
} else {//周内9点到17:30为工作时间
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
if (hour < 9 || (hour == 17 && minute > 30) || hour >= 18) {
result = true;
}
}
}
return result;
} /**
* 非工作时间获取最近的工作时间
* @param date 时间
* @return 返回处理后时间,格式:yyyy-MM-dd HH:mm:ss
*/
public static String getPreWorkDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
if (!isHolidayOrFestival(date)) {
return datechange(date, "yyyy-MM-dd HH:mm:ss");
}
//如果是周日最近的工作日为周五,日期减去2
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
c.add(Calendar.DAY_OF_MONTH, -2);
}
//如果是周六最近的工作日为周五,日期减去1
else if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
c.add(Calendar.DAY_OF_MONTH, -1);
}
//如果是周一,并且为早上9点之前,最近的工作日为周五,日期减去3
else if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
int hour = c.get(Calendar.HOUR_OF_DAY);
if (hour < 9) {
c.add(Calendar.DAY_OF_MONTH, -3);
}
}else{
int hour = c.get(Calendar.HOUR_OF_DAY);
if (hour < 9) {
c.add(Calendar.DAY_OF_MONTH, -1);
}
}
c.set(Calendar.HOUR_OF_DAY, 17);
c.set(Calendar.MINUTE, 30);
c.set(Calendar.SECOND, 0);
return datechange(c.getTime(), "yyyy-MM-dd HH:mm:ss");
} public static String datechange(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String demo = sdf.format(date);
return demo;
} /**
* 根据判断当前时间是否是节日
*
* @param date
* 时间
* @return
*/
private static boolean isHoliday(Date date) {
boolean result = false;
String dateStr = sdf.format(date);
if (holidays.size() > 0) {
for (String holiday : holidays) {
if (holiday.equals(dateStr)) {
result = true;
break;
}
}
}
return result;
} public static void main(String[] args) throws ParseException {
String d = "2017-07-20 18:31:58";
System.out.println(getPreWorkDay(sdf1.parse(d)));
}
}
java处理节假日和工作时间的工具类的更多相关文章
- Java判断不为空的工具类总结
1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. package com.bie.util; import java.util.Collection; imp ...
- Java字符串转16 进制工具类Hex.java
Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...
- Java中的AES加解密工具类:AESUtils
本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...
- java里poi操作excel的工具类(兼容各版本)
转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...
- java.util.Arrays----操作数组的工具类
java.util.Arrays操作数组的工具类,里面定义了很多操作数组的方法 1.boolean equals(int[] a,int[] b):判断两个数组是否相等. 2.String toStr ...
- Java数组操作利器:Arrays工具类
java.util.Arrays提供大量的工具方法来操作数组,这些方法全是静态方法. 1 便捷创建List public static <T> List<T> asList(T ...
- 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API
---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
//------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...
随机推荐
- Jarvis OJ - [XMAN]level1 - Writeup
Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...
- 创建本地yum源仓库
更新本地yum源 yum仓库服务端配置如下 : 1. 创建yum仓库目录 mkdir -p /data/yum_data/ cd /data/yum_data/ #可以上传rpm包到此目录,此目录下面 ...
- web布局相关
1.用table布局时,如果设置了table-layout:fixed或者对第一行的两个列进行了合并后导致后面的列宽度失效,这是可以使用 <colgroup> <col ...
- Django项目报错: 禁止访问(403),CSRF验证失败,相应中断
如果想要取消表单的CSRF防护,可以在模板上删除{% csrf_token %}, 并且在相应的视图函数中添加装饰器@csrf_exempt, 代码如下: from django.views.deco ...
- 阿里云打包成zip格式,批量下载
/** * 从阿里云下载文件 (以附件形式下载) 多个文件进行zip下载 第二种 * @param request * @param response */ @ResponseBody @Reques ...
- php自制工具函数,常用的函数集合
字符串与爬虫相关 1,解析url /** * 模拟访问,可get可post * @param $curl * @param $postInfo post数组/字符串,不填默认没有post * @par ...
- 情人节用Python智能聊天机器人的实现|制作一个虚拟恋人
首先项目需要的包 import urllib.request import urllib.parse from tkinter import * import time PS:另外很多人在学习Pyth ...
- 吴裕雄 python 机器学习——人工神经网络与原始感知机模型
import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ...
- 常见的一些mysql多表操作收集(备份)
原帖地址:https://blog.csdn.net/qq_37248648/article/details/78468291 多表操作框架 SELECT A.ID, A.NUMBER, A.PRIC ...
- JQuery选择器(转载)
原文:https://blog.csdn.net/colorapp/article/details/44279645 一. jQuery选择器是什么1. CSS选择器要是某个样式应用于特定的HTML元 ...