首先,定义`时间枚举值`

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 时间工具类的更多相关文章

  1. DateUtils时间工具类探究

    首先声明一下,这个DateUtils工具类不是自己写的,而是在commons-lang-2.Xjar包或是commons-lang3-3.X.jar包中,具体在哪个jar包中,看程序具体添加了哪个版本 ...

  2. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  3. java时间工具类

    在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...

  4. Apache Commons Lang之日期时间工具类

    码农不识Apache,码尽一生也枉然. FastDateFormat FastDateFormat是一个快速且线程安全的时间操作类,它完全可以替代SimpleDateFromat.因为是线程安全的,所 ...

  5. 时间工具类之"获取相差天数"

    一.时间工具类DateUtils之"获取相差天数" 1 /** 2 * 相差天数 3 * 4 * <p>TODO 方法功能描述 5 * 6 * @param start ...

  6. 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...

  7. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  8. 超详细的Java时间工具类

    package com.td.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.Pa ...

  9. 基于Java8的日期时间工具类DateTimeFormatter

    原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...

随机推荐

  1. windows安装redis扩展

    Thread Safety enabled 打开phpinfo() 看php版本是ts还是nts,  如上是ts版本的,所以需要安装redis的ts版本, redis的扩展下载地址 https://p ...

  2. 接上一篇:(四) 控制反转(IOC)/ 依赖注入(DI)

    spring 核心功能:beans.core.context.expression Spring设计理念 Spring是面向Bean的编程 Spring三个核心组件(Core.Context.Bean ...

  3. java运算符与程序逻辑控制

    一.运算符 java中的运算符大致分为四种:数学运算符,关系运算符.逻辑运算符.位运算 1.数学运算符:即咱们平常说的加减乘除运算,这种运算是分先后顺序的,如果想要优先进行运算,建议加上小括号,使其运 ...

  4. Jmeter生成HTML测试报告

    jmeter轻便小巧,运行速度快,但是缺少直观的可视化测试报告,并且生成测试报告操作稍微有点麻烦. GUI界面没有生成测试报告的功能,只能使用命令行生成测试报告.这里需要提到一个jtl的文件,它是生成 ...

  5. redis new

    redis cluster 数据结构 geo,heperloglog 3个非核心dict:阻塞dict,非阻塞dict,watch dict 3个bio线程,生产者消费者模式,主线程生产者: 1.la ...

  6. 【Java】Java socket通信使用read,readline函数的阻塞问题

    Socket通信是Java网络编程中比较基础的部分,其原理其实就是源ip,源端口和目的ip,目的端口组成的套接字通信.其底层还设及到了TCP协议的通信. Java中的Socket通信可以通过客户端的S ...

  7. 解决 spring-integration-mqtt 频繁报 Lost connection 错误

    问题描述 在之前的博客介绍了如何在 Spring Boot 集成 MQTT,后面使用中没有发现问题,最近发现一直报错: Lost connection: Connection lost; retryi ...

  8. PyQt(Python+Qt)学习随笔:QListView的selectionRectVisible属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的selectionRectVisible属性用于控制视图中的选择矩形框是否可见, ...

  9. 【Vue】 axios同步执行多个请求

    问题 项目中遇到一个需求,在填写商品的时候,选择商品分类后,加载出商品分类的扩展属性. 这个扩展属性有可能是自定义的数据字典里的单选/多远. 要用第一个axios查询扩展属性,第二个axios 从第一 ...

  10. [GKCTF2020]cve版签到

    cve-2020-7066漏洞 利用get_header($url)函数漏洞%00对部分url截断 构造ssrf请求,用127.0.0.1网址访问目标主机内部资源 其实就是get_header()的C ...