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. ...
随机推荐
- 理解go语言的shellcode加载器
序言 本文假设你知道unsafe包常见函数的用法,若否,请查看 https://books.studygolang.com/gopl-zh/ch13/ch13-01.html 第13章. 例子和代码 ...
- MindSpore手写数字识别初体验,深度学习也没那么神秘嘛
摘要:想了解深度学习却又无从下手,不如从手写数字识别模型训练开始吧! 深度学习作为机器学习分支之一,应用日益广泛.语音识别.自动机器翻译.即时视觉翻译.刷脸支付.人脸考勤--不知不觉,深度学习已经渗入 ...
- VM15 Ubuntu18.04 安装c/c++
输入"su"再输入密码即进入根用户,(gcc是默认安装的,但刚安装完成的系统中的gcc并不能用来开发,还缺少常用的头文件和库文件,还组要安装build-essential 软件包) ...
- Markdown 语法详解
Markdown 学习 标题 三级标题 四级标题 最多支持六级标题 "#... + 标题名称" 字体 hello, world "** 内容 **" hello ...
- 路由器/交换机Console口登录密码丢失后如何恢复
Console口登录密码丢失后如何恢复 如果忘记了Console口登录密码,用户可以通过以下两种方式来设置新的Console口登录密码. 通过STelnet/Telnet登录路由器/交换机设置新的Co ...
- 九. Vuex详解
1. 理解Vuex 1.1 Vuex功能 官方解释 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用 集中式存储 管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方 ...
- PyQt(Python+Qt)学习随笔:QLineEdit行编辑器功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QLineEdit部件是一个单行文本编辑器,支持撤消和重做. ...
- [BJDCTF 2nd]duangShell 反弹shell
[BJDCTF 2nd]duangShell [BJDCTF 2nd]duangShell 点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件 ...
- 几句话说明 .NET MVC中ViewData, ViewBag和TempData的区别
ViewData和TempData是字典类型,赋值方式用字典方式, ViewData["myName"] ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.my ...
- 第 7 篇 Scrum 冲刺博客
每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 补充注释,初步查找bug 修改bug 无 陈创 ...