DateUtils 时间工具类
首先,定义`时间枚举值`
public enum TimeEnum {
/**
* 时间格式
*/
YYYY_MM_DD("yyyy-MM-dd"),
YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"),
YYYYMMDDHHMMSS("yyyyMMddHHmmss"),
YYYY_MM("yyyy/MM/"),
YYYYMMDD("yyyyMMdd");
String format;
TimeEnum(String format) {
this.format = format;
}
public String getFormat() {
return format;
}
}
其次,copy以下方法:
import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.lang.NonNull; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone; public class DateUtils { private static final FastDateFormat YYYY_MM = FastDateFormat.getInstance(TimeEnum.YYYY_MM.getFormat()); //yyyy/MM/
private static final FastDateFormat YYYYMMDD = FastDateFormat.getInstance(TimeEnum.YYYYMMDD.getFormat()); //yyyyMMdd
private static final FastDateFormat YYYY_MM_DD = FastDateFormat.getInstance(TimeEnum.YYYY_MM_DD.getFormat()); // yyyy-MM-dd
private static final FastDateFormat YYYY_MM_DD_HH_MM_SS = FastDateFormat.getInstance(TimeEnum.YYYY_MM_DD_HH_MM_SS.getFormat()); // yyyy-MM-dd HH:mm:ss
private static final FastDateFormat YYYYMMDDHHMMSS = FastDateFormat.getInstance(TimeEnum.YYYYMMDDHHMMSS.getFormat()); // yyyyMMddHHmmss
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // yyyy-MM-dd HH:mm:ss /**
* 获取当前时间
*
* @param timeEnum 时间格式类
* @param date 时间
*/
public static String getNowTimeByString(@NonNull TimeEnum timeEnum,@NonNull Date date) {
switch (timeEnum) {
case YYYY_MM_DD:
return YYYY_MM_DD.format(date);
case YYYYMMDDHHMMSS:
return YYYYMMDDHHMMSS.format(date);
case YYYY_MM:
return YYYY_MM.format(date);
case YYYYMMDD:
return YYYYMMDD.format(date);
case YYYY_MM_DD_HH_MM_SS:
default:
return YYYY_MM_DD_HH_MM_SS.format(date);
}
} /**
* 指定时间(参数)向前推,或向后推指定时间
*
* @param date 时间
* @param daysCount 天数
* @param timeEnum 时间格式类
*/
public static String movePointerTime(Date date, int field, int daysCount, TimeEnum timeEnum) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(field, daysCount);
return getNowTimeByString(timeEnum, calendar.getTime());
} /**
* 将本地时间, 转换成目标时区的时间
* @param sourceDate
* @param targetZoneId {@link ZoneIds}
* @return
*/
public static Date convertTimezone(Date sourceDate, String targetZoneId){
return convertTimezone(sourceDate, TimeZone.getTimeZone(targetZoneId));
} public static Date convertTimezone(Date sourceDate, String sourceZoneId, String targetZoneId){
TimeZone sourceTimeZone=TimeZone.getTimeZone(sourceZoneId);
TimeZone targetTimeZone=TimeZone.getTimeZone(targetZoneId); return convertTimezone(sourceDate, sourceTimeZone, targetTimeZone);
} /**
* 将本地时间,转换成对应时区的时间
* @param localDate
* @param targetTimezone 转换成目标时区所在的时间
* @return
*/
public static Date convertTimezone(Date localDate, TimeZone targetTimezone){
return convertTimezone(localDate, TimeZone.getDefault(), targetTimezone);
} /**
* 将sourceDate转换成指定时区的时间
* @param sourceDate
* @param sourceTimezone sourceDate所在的时区
* @param targetTimezone 转化成目标时间所在的时区
* @return
*/
public static Date convertTimezone(Date sourceDate, TimeZone sourceTimezone, TimeZone targetTimezone){ Calendar calendar=Calendar.getInstance();
// date.getTime() 为时间戳, 为格林尼治到系统现在的时间差,世界各个地方获取的时间戳是一样的,
// 格式化输出时,因为设置了不同的时区,所以输出不一样
long sourceTime=sourceDate.getTime();
calendar.setTimeZone(sourceTimezone);
calendar.setTimeInMillis(sourceTime);// 设置之后,calendar会计算各种filed对应的值,并保存
//获取源时区的到UTC的时区差
int sourceZoneOffset=calendar.get(Calendar.ZONE_OFFSET);
calendar.setTimeZone(targetTimezone);
calendar.setTimeInMillis(sourceTime);
int targetZoneOffset=calendar.get(Calendar.ZONE_OFFSET);
int targetDaylightOffset=calendar.get(Calendar.DST_OFFSET); // 夏令时
long targetTime=sourceTime+ (targetZoneOffset+targetDaylightOffset) -sourceZoneOffset;
return new Date(targetTime);
} /**
* 时间追加\减去几天
*/
public static String minusTime(@NonNull TimeEnum timeEnum,@NonNull String time, @NonNull Integer count) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(timeEnum.getFormat());
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(time));
calendar.add(Calendar.DAY_OF_WEEK, count);
return dateFormat.format(calendar.getTime());
} public static void main(String[] args) throws ParseException {
System.out.println(minusTime(TimeEnum.YYYYMMDD, "20200709", -1));
} }
DateUtils 时间工具类的更多相关文章
- DateUtils时间工具类探究
首先声明一下,这个DateUtils工具类不是自己写的,而是在commons-lang-2.Xjar包或是commons-lang3-3.X.jar包中,具体在哪个jar包中,看程序具体添加了哪个版本 ...
- 小记Java时间工具类
小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...
- java时间工具类
在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...
- Apache Commons Lang之日期时间工具类
码农不识Apache,码尽一生也枉然. FastDateFormat FastDateFormat是一个快速且线程安全的时间操作类,它完全可以替代SimpleDateFromat.因为是线程安全的,所 ...
- 时间工具类之"获取相差天数"
一.时间工具类DateUtils之"获取相差天数" 1 /** 2 * 相差天数 3 * 4 * <p>TODO 方法功能描述 5 * 6 * @param start ...
- 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- 超详细的Java时间工具类
package com.td.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.Pa ...
- 基于Java8的日期时间工具类DateTimeFormatter
原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...
随机推荐
- jsp自定义错误页
1.在可能出错页面的Page标签上errorPage="/Error.jsp"指定错误页 2.Error,jsp的page标签中isErrorPage="true&quo ...
- jmeter接口测试多数据组合登陆场景
一.安装好Java运行环境 百度下载JDK并且配置JAVA环境的教程一搜一大把,这里我就不详说了 二.运行JMETER 打开安装目录的bin文件中的jmeter.bat文件 三.添加程序 1.添加线程 ...
- nginx负载均衡配置详解
已经了解了负载均衡的常用算法:轮询,加权轮询,热备等... 接下来就看看具体怎么配置. upstream配置是写一组被代理的服务器地址,然后配置负载均衡的算法. upstream mysvr{ ser ...
- 蓝桥杯 调手表(bfs解法)
小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时 ...
- java46
1.迭代器遍历 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public c ...
- SAP调用RestfulApi接口POST数据到外部系统
作者:明光烁亮 出处:http://www.cnblogs.com/hezhongxun/ 微信号:HEme922 欢迎加好友一起交流SAP! 视频资料共享. 本文版权归作者和博客园共有,欢迎转载,但 ...
- 部署完的Django项目升级为HTTPS
1.阿里云上申请免费ssl证书--->提交各种资料--->等待审核--->下载证书. 2.远程连接阿里云服务器,将下载下来的证书内容复制到Nginx安装目录下的cert目录(需要新建 ...
- python核心高级学习总结4-------python实现进程通信
Queue的使用 Queue在数据结构中也接触过,在操作系统里面叫消息队列. 使用示例 # coding=utf-8 from multiprocessing import Queue q = Que ...
- CTFHub Web题学习笔记(SQL注入题解writeup)
Web题下的SQL注入 1,整数型注入 使用burpsuite,?id=1%20and%201=1 id=1的数据依旧出现,证明存在整数型注入 常规做法,查看字段数,回显位置 ?id=1%20orde ...
- 使用T4模板动态生成NPoco实体类
这是一个妥妥的NPoco类,这是我们在工作开发中,手动去写这个实体类,属实非常心累,字段少无所谓一次两次,数量多了,字段多了,就心态裂开