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. ...
随机推荐
- 地图上显示点在点上标注当前点的id
HTML: <div class="form-group field-company-state"> <div style="width:1000px; ...
- python基础之操作列表
遍历元素 magicians = ['alice','david','carolina'] for magician in magicians: print(magician) magicians = ...
- sublime text3配置javascript运行环境
步骤一 安装node.js 官网下载链接:node.js 步骤二 Sublime 依次点击 菜单栏 Tools => Build System => New Build System 步骤 ...
- Python_生成器和迭代器的区别
迭代器和生成器的区别是什么?这个问题面试的时候经常作为灵魂拷问.今天一起从概念到代码梳理一遍,作为总结和记录. 区别是: 生成器的好处是延迟计算,一次返回一个结果.也就是说,它不会一次生成所有的结果, ...
- 【证书】curl 和 java 请求报证书错误
1. 说明: 以下:例子的域名因为工作环境的问题,被我拿自己的博客域名替代了,所以无法进行模拟测试,请珍重,哈哈! 2. 环境: centos:7.5 java jdk:1.8.0_74 3. cur ...
- C语言位运算符详解
原文链接:https://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题 ...
- Beta冲刺随笔——Day_Four
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...
- 真香!Python开发工程师都选择这个数据库:因为它免费
数据库类别 既然我们要使用关系数据库,就必须选择一个关系数据库. 目前广泛使用的关系数据库也就这么几种: 付费的商用数据库: Oracle,典型的高富帅: SQL Server,微软自家产品,Wind ...
- 第三十七章、PyQt输入部件:QAbstractSlider派生类QScrollBar滚动条、QSlider滑动条、QDial刻度盘功能介绍
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 Designer中的输入部件Horizo ...
- 分布式计算框架-Spark(spark环境搭建、生态环境、运行架构)
Spark涉及的几个概念:RDD:Resilient Distributed Dataset(弹性分布数据集).DAG:Direct Acyclic Graph(有向无环图).SparkContext ...