首页 > 编程语言 >安利一个java开发好用的时间工具类

安利一个java开发好用的时间工具类

时间:2022-10-09 11:39:09浏览次数:81  
标签:DateUtil 03 01 java 安利 Date date 2017 好用


 在半年的开发中,经历过,自己写操作时间的工具类,到最后规范工具类,然后项目统一,经过了不少的折腾。这段时间接触到这个 hutool 万能工具类,给大家安利一下,这篇文章只介绍其中和时间相关的工具类。

  这个工具类真的很好用,基本上封装好了我们经常用到的对时间的操作。很好用,在maven项目中,直接引入到项目中即可使用。

​由来​

考虑到Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位(一个月前等等)。

对于Date对象,为了便捷,使用了一个DateTime类来代替之,继承自Date对象,主要的便利在于,覆盖了toString()方法,返回yyyy-MM-dd HH:mm:ss形式的字符串,方便在输出时的调用(例如日志记录等),提供了众多便捷的方法对日期对象操作,关于DateTime会在相关章节介绍。

 

这里只介绍通过Pom 的形式引入到项目中,依赖如下

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.2.0</version>
</dependency>

 

使用​​方法​​如下,直接在项目中使用即可

​转换​

​Date、long、Calendar之间的相互转换​

//当前时间
Date date = DateUtil.date();
//当前时间
Date date2 = DateUtil.date(Calendar.getInstance());
//当前时间
Date date3 = DateUtil.date(System.currentTimeMillis());
//当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();
//当前日期字符串,格式:yyyy-MM-dd
String today= DateUtil.today();Copy to clipboardErrorCopied

​字符串转日期​

​DateUtil.parse​​方法会自动识别一些常用格式,包括:

  1. yyyy-MM-dd HH:mm:ss
  2. yyyy-MM-dd
  3. HH:mm:ss
  4. yyyy-MM-dd HH:mm
  5. yyyy-MM-dd HH:mm:ss.SSS
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);Copy to clipboardErrorCopied

我们也可以使用自定义日期格式转化:

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");Copy to clipboardErrorCopied

​格式化日期输出​

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);

//结果 2017/03/01
String format = DateUtil.format(date, "yyyy/MM/dd");

//常用格式的格式化,结果:2017-03-01
String formatDate = DateUtil.formatDate(date);

//结果:2017-03-01 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);

//结果:00:00:00
String formatTime = DateUtil.formatTime(date);Copy to clipboardErrorCopied

​获取Date对象的某个部分​

Date date = DateUtil.date();
//获得年的部分
DateUtil.year(date);
//获得月份,从0开始计数
DateUtil.month(date);
//获得月份枚举
DateUtil.monthEnum(date);
//.....Copy to clipboardErrorCopied

​开始和结束时间​

有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,DateUtil也提供了相关方法:

String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);

//一天的开始,结果:2017-03-01 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);

//一天的结束,结果:2017-03-01 23:59:59
Date endOfDay = DateUtil.endOfDay(date);Copy to clipboardErrorCopied

​日期时间偏移​

日期或时间的偏移指针对某个日期增加或减少分、小时、天等等,达到日期变更的目的。Hutool也针对其做了大量封装

String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);

//结果:2017-03-03 22:33:23
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);

//常用偏移,结果:2017-03-04 22:33:23
DateTime newDate2 = DateUtil.offsetDay(date, 3);

//常用偏移,结果:2017-03-01 19:33:23
DateTime newDate3 = DateUtil.offsetHour(date, -3);Copy to clipboardErrorCopied

针对当前时间,提供了简化的偏移方法(例如昨天、上周、上个月等):

//昨天
DateUtil.yesterday()
//明天
DateUtil.tomorrow()
//上周
DateUtil.lastWeek()
//下周
DateUtil.nextWeek()
//上个月
DateUtil.lastMonth()
//下个月
DateUtil.nextMonth()Copy to clipboardErrorCopied

​日期时间差​

有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法:

String dateStr1 = "2017-03-01 22:33:23";
Date date1 = DateUtil.parse(dateStr1);

String dateStr2 = "2017-04-01 23:33:23";
Date date2 = DateUtil.parse(dateStr2);

//相差一个月,31天
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);Copy to clipboardErrorCopied

​格式化时间差​

有时候我们希望看到易读的时间差,比如XX天XX小时XX分XX秒,此时使用​​DateUtil.formatBetween​​方法:

//Level.MINUTE表示精确到分
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
//输出:31天1小时
Console.log(formatBetween);Copy to clipboardErrorCopied

​计时器​

计时器用于计算某段代码或过程花费的时间

TimeInterval timer = DateUtil.timer();

//---------------------------------
//-------这是执行过程
//---------------------------------

timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数Copy to clipboardErrorCopied

​其它​

//年龄
DateUtil.ageOfNow("1990-01-30");

//是否闰年
DateUtil.isLeapYear(2017);

标签:DateUtil,03,01,java,安利,Date,date,2017,好用
From: https://blog.51cto.com/u_15812686/5739953

相关文章

  • Can not find java process. Try to pass <pid> in command line. Please select an ava
    ## 问题描述 下载了arthas 以后 傻傻的直接启动了   java-jararthas-boot.jar  结果就报错这个。 其实arthas 是需要 启动一个服务的。报这个错也就是说......
  • macos+vscode+java
    下载jdkvscode安装插件:ExtensionPackForJavacommand+shift+p:CreateJavaProjectRunJava项目结构。根据需要配置settings.json......
  • JAVA Spring学习笔记------MVC
    SpingMVC首先我没接触过页面开发这里只简单的介绍如何通过spring利用注解的形式搭建一个简单的页面首先我们配置pom文件先加入两个依赖<dependency><gro......
  • java开发框架低代码平台会不会过时?
    其实,框架一词原先是出现下建筑领域的,主要是指在建造房屋前期构建的建筑骨架。后来在编程领域,框架就引申为应用程序的骨架了,在这个基础上,程序员可以随心加入自己想要的元素,......
  • Java多线程(二)线程创建
    三种创建方式1.继承Thread类2.实现Runnable接口3.实现Callable接口(了解) 继承Thread类自定义线程继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start(......
  • Java面试题
    Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,Java开发工具包,提供了Java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,Java运行环境......
  • 力扣219(java&python)-存在重复元素 II(简单)
    题目:给你一个整数数组 nums和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,满足nums[i]==nums[j]且abs(i-j)<=k。如果存在,返回true;否则,返回f......
  • javascript简单实现主题变色
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"c......
  • JavaScript 事件
    事件浏览器窗口,文档等发生的一些特定的交互瞬间。对于Web应用来说,有下面这些代表性的事件:点击某个元素、将鼠标移动至某个元素上方、关闭弹窗等等。JavaScript是以事......
  • 在java 的基础上增量学习 shell 编程
     shell 脚本其实还是我们比较常用的,在开发中经常会有需求,要写脚本实现某某功能。 比如,别人让写一个告警脚本,将消息推送到钉钉上。 这篇文章作为shell 的入门吧。 jav......