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 ...
随机推荐
- 在 linux 上运行 oracle sql脚本
方法一 su - oracle //切换到oracle用户模式下 sqlplus /nolog //登录sqlplus connect /as sysdba; //连接orcale @sql脚本路 ...
- java项目中的异常处理总结
异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要. 比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异常. 我找一个比较形象 ...
- APP 安全测试
http://www.cnblogs.com/wetest/p/6694529.html
- java_细节_windows7下记事本保存为utf-8格式的问题
如果在win7下的记事本直接另存为utf-8格式,是带有dom的utf-8,所以处理的时候需要注意,因为第一个字符是"?",而且不可见
- selenium定位方法-iframe元素定位方法
在自动化测试中,如果无法定位到一个元素,那么最大的可能是定位的元素是在iframe框架中,iframe对象代表一个HTML的内联框架,在HTML中,iframe每出现一次,一个iframe对象就会被创 ...
- Python爬虫连载7-cookie的保存与读取、SSL讲解
一.cookie的保存与读取 1.cookie的保存-FileCookie.Jar from urllib import request,parse from http import cookieja ...
- 【网易官方】极客战记(codecombat)攻略-地牢-攻破突袭
关卡连接: https://codecombat.163.com/play/level/hack-and-dash 通过加速药来逃离地牢精灵 简介: 空气中弥漫着危险的气息.你应该从地牢里逃出来. 但 ...
- Redis05——Redis五大数据类型 String
String String是Redis最基本的数据类型(较常用),一个key对应一个value string类型是二进制安全的,Redis的string可以包含任何数据 一个Redis中字符串valu ...
- linux安装tomcat步骤
2.1 查看当前系统是否安装过该软件,如果安装过则下载 rpm –qa | grep –i tomcat rpm –e --nodeps 程序名称2.2上传2.3创建tomcat的安装路径 mkdir ...
- python字典里面列表排序
#coding=utf8 #获取到的数据库ip,和负载数据,需要按照负载情况排序 a={u'1.8.1.14': [379, 368, 361, 358, 1363], u'9.2.4.3': [42 ...