【Java】处理工具类详解

 在Java开发中,日期和时间的处理是一个绕不开的话题。Java自身提供了丰富的API来处理日期和时间,但是使用起来可能较为繁琐。因此,许多开发者会使用一些工具类来简化日期和时间的处理。本文将介绍一个常用的日期处理工具类——DateUtils,并提供详细的代码和说明。

工具类介绍

 编写一个自定义的DateUtils,继承自org.apache.commons.lang3.time.DateUtils的Java类,提供一系列静态方法来简化日期和时间的处理。这些方法包括日期的格式化、解析、计算日期差等。

方法详解

1. 获取当前日期和时间

public static Date getNowDate()

这个方法返回当前的日期和时间,类型为java.util.Date

2. 获取当前日期

public static String getDate()

这个方法返回当前的日期,格式为yyyy-MM-dd

3. 获取当前时间

public static String getTime()

这个方法返回当前的时间,格式为yyyy-MM-dd HH:mm:ss

4. 获取当前日期和时间(自定义格式)

public static String dateTimeNow(final String format)

这个方法返回当前日期和时间,格式由参数format指定。

5. 日期格式化

public static final String parseDateToStr(final String format, final Date date)

这个方法将java.util.Date对象格式化为字符串,格式由参数format指定。

6. 日期解析

public static final Date dateTime(final String format, final String ts)

这个方法将字符串解析为java.util.Date对象,格式由参数format指定。

7. 计算日期差

public static int differentDaysByMillisecond(Date date1, Date date2)

这个方法计算两个日期之间的天数差。

8. 计算时间差

public static String getDatePoor(Date endDate, Date nowDate)

这个方法计算两个时间之间的差,并以“天小时分钟”的格式返回。

9. LocalDateTime和Date之间的转换

public static Date toDate(LocalDateTime temporalAccessor)

这个方法将LocalDateTime对象转换为java.util.Date对象。

10. LocalDate和Date之间的转换

public static Date toDate(LocalDate temporalAccessor)

这个方法将LocalDate对象转换为java.util.Date对象。

使用示例

下面是一些使用DateUtils工具类的示例。

// 获取当前日期和时间
Date nowDate = DateUtils.getNowDate();
System.out.println(nowDate);
// 获取当前日期,格式为yyyy-MM-dd
String currentDate = DateUtils.getDate();
System.out.println(currentDate);
// 获取当前时间,格式为yyyy-MM-dd HH:mm:ss
String currentTime = DateUtils.getTime();
System.out.println(currentTime);
// 将日期和时间格式化为自定义格式
String dateTime = DateUtils.dateTimeNow("yyyyMMddHHmmss");
System.out.println(dateTime);
// 将日期和时间字符串解析为Date对象
Date parsedDate = DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", "2021-08-08 08:08:08");
System.out.println(parsedDate);
// 计算两个日期之间的天数差
int daysDiff = DateUtils.differentDaysByMillisecond(new Date(), parsedDate);
System.out.println(daysDiff);
// 计算两个时间之间的差
String timeDiff = DateUtils.getDatePoor(new Date(), parsedDate);
System.out.println(timeDiff);

结果:
在这里插入图片描述

代码

import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;/*** 时间工具类*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {public static String YYYY = "yyyy";public static String YYYY_MM = "yyyy-MM";public static String YYYY_MM_DD = "yyyy-MM-dd";public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM","yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM","yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM" };/*** 获取当前Date型日期*/public static Date getNowDate() {return new Date();}/*** 获取当前Date型日期 YYYY_MM_DD*/public static String getDate() {return dateTimeNow(YYYY_MM_DD);}/*** 获取当前Date型日期 YYYY_MM_DD_HH_MM_SS*/public static final String getTime() {return dateTimeNow(YYYY_MM_DD_HH_MM_SS);}/*** 获取当前Date型日期 YYYYMMDDHHMMSS*/public static final String dateTimeNow() {return dateTimeNow(YYYYMMDDHHMMSS);}/*** 获取当前Date型日期 format*/public static final String dateTimeNow(final String format) {return parseDateToStr(format, new Date());}/*** 获取Date型日期 YYYY_MM_DD*/public static final String dateTime(final Date date) {return parseDateToStr(YYYY_MM_DD, date);}/*** 将Date型日期转换为format型字符串*/public static final String parseDateToStr(final String format, final Date date) {return new SimpleDateFormat(format).format(date);}/*** 获取Date型日期 format*/public static final Date dateTime(final String format, final String ts) {try {return new SimpleDateFormat(format).parse(ts);} catch (ParseException e) {throw new RuntimeException(e);}}/*** 日期路径 即年/月/日 如2018/08/08*/public static final String datePath() {Date now = new Date();return DateFormatUtils.format(now, "yyyy/MM/dd");}/*** 日期路径 即年/月/日 如20180808*/public static final String dateTime() {Date now = new Date();return DateFormatUtils.format(now, "yyyyMMdd");}/*** 日期型字符串转化为日期 格式*/public static Date parseDate(Object str) {if (str == null) {return null;}try {return parseDate(str.toString(), parsePatterns);} catch (ParseException e) {return null;}}/*** 获取服务器启动时间*/public static Date getServerStartDate() {long time = ManagementFactory.getRuntimeMXBean().getStartTime();return new Date(time);}/*** 计算相差天数*/public static int differentDaysByMillisecond(Date date1, Date date2) {return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));}/*** 计算两个时间差*/public static String getDatePoor(Date endDate, Date nowDate) {long nd = 1000 * 24 * 60 * 60;long nh = 1000 * 60 * 60;long nm = 1000 * 60;// long ns = 1000;// 获得两个时间的毫秒时间差异long diff = endDate.getTime() - nowDate.getTime();// 计算差多少天long day = diff / nd;// 计算差多少小时long hour = diff % nd / nh;// 计算差多少分钟long min = diff % nd % nh / nm;// 计算差多少秒//输出结果// long sec = diff % nd % nh % nm / ns;return day + "天" + hour + "小时" + min + "分钟";}/*** 将 LocalDateTime 对象转换为 Date 对象。** @param temporalAccessor LocalDateTime 实例* @return 返回对应的 Date 实例*/public static Date toDate(LocalDateTime temporalAccessor) {// 将 LocalDateTime 转换为系统默认时区的 ZonedDateTimeZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());// 使用 ZonedDateTime 的瞬时时间创建 Date 对象return Date.from(zdt.toInstant());}/*** 将 LocalDate 对象转换为 Date 对象。** @param temporalAccessor LocalDate 实例* @return 返回对应的 Date 实例*/public static Date toDate(LocalDate temporalAccessor) {// 将 LocalDate 转换为 LocalDateTime,时间为 00:00:00LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));// 将 LocalDateTime 转换为系统默认时区的 ZonedDateTimeZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());// 使用 ZonedDateTime 的瞬时时间创建 Date 对象return Date.from(zdt.toInstant());}}

总结

DateUtils是一个非常有用的日期处理工具类,它简化了日期和时间的处理,提高了开发效率。如果你需要在Java项目中处理日期和时间,不妨试试这个工具类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环形链表的约瑟夫问题(牛客网)

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param n int整型 * param m int整型 * return int整型*/struct ListNode * BuyNode(int n)//创建节点和成环{ struct ListNode *pheadNULL;struct ListNode *ptailN…

吐血整理!跨境电商全年选品方向!一年12个月热点解析

一月 演出服、礼盒、贺卡、装饰品、彩带、拉花、红地毯、邀请函、荧光棒、泡泡机等。 二月 超级碗:投影仪、蓝牙音箱、超级碗电子游戏、望远镜、运动类产品等; 情人节:珠宝、服饰饰品、巧克力、香水、口红、烘焙用品、礼盒、个人护理、成…

MySQL常用命令和函数的讲解以及表之间的联结

Mysql的中一些语句的用法: 有表: CREATE TABLE book (id int(20) NOT NULL,book_name varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 书名,press varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NUL…

pymavlink 解析自定义mavlink消息。

1.下载mavlink_master包,用于将xml 文件生成对应的py文件。地址是 https://codeload.github.com/mavlink/mavlink/zip/refs/heads/master 进入目录运行python .\mavgenerate.py 呈现gui程序 2.根据发送端的消息定义格式修改接收解析段的pymavlink有关库。 可修改……

基于大数据的手机销售数据分析可视化系统,爬取京东和淘宝的的手机商品数据进行分析,Flask,Python,数据可视化

介绍 该系统主要是通过爬取京东和淘宝的的手机商品数据进行分析。爬虫python脚本通过打开浏览器授权登录后按照搜索“手机”关键字后出现的商品列表进行爬取,获取标题名,解析付款人数,品牌,评论人数,发货地&#xff0…

算法学习——LeetCode力扣补充篇14(179. 最大数、43. 字符串相乘、32. 最长有效括号、543. 二叉树的直径、113. 路径总和 II)

算法学习——LeetCode力扣补充篇14 179. 最大数 179. 最大数 - 力扣(LeetCode) 描述 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大&…

吴恩达2022机器学习专项课程(一) 第二周课程实验:特征缩放和学习率(多元)(Lab_03)

备注:笔者只对个人认为的重点代码做笔记,其它详细内容请参考吴恩达老师实验里的笔记。 1.多元特征的训练集 调用load_house_data()函数,将训练集数据保存到数组中。 X,y分别存储所有训练样本的前四列,所有训练样本的…

python中的列表、元组、字典、集合(集合篇)

数据类型定义符号访问元素是否可变是否重复是否有序列表 [ ]索引可变可重复有序元组()索引不可变可重复有序字典{key:value}键可变可重复无序集合{ }可变不可重复无序 基本概念 python语言中的集合是无序的、可变的容器类对象,所…

4.16作业

1.总结keil5下载代码和编译代码需要注意的事项 一、在编译代码时需要先点击魔术棒点击 修改flash Downlond 和pack 二、可以通过F12转跳到对应的函数中,查看函数的原型 三、注释出现乱码通过 Edit中的中的来修改 四、要先bulid在load 2.总结STM32Cubemx的使用方…

NLP学习(1)-搭建环境

前言 仅记录学习笔记,如有错误欢迎指正。 环境搭建 一、环境软件安装: 1、Anaconda安装(一款可以同时创建和管理多个python环境的软件) (1) 安装链接: https://blog.csdn.net/m0_61531676/article/details/126290…

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本,分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图,计算数据的均值、标准差、偏斜度和峭度…

Ribbon 添加右侧区域菜单项

效果图如下所示: 类似与上图效果所示,代码如下: RibbonPage* pageHome1 ribbonBar()->addPage(tr("Home")); //实现代码: { QMenu* menuOptions ribbonBar()->addMenu(tr("Options"))…

古籍数字化平台:精校功能介绍

一、平台介绍 古籍数字化平台,本着公益性、低成本、合作共赢的三大原则,功能涵盖古籍OCR识别、族谱县志OCR识别、民国报纸OCR识别、图文逐字校对、数据著录、智能标点分段、精编排版、智能白话译文等,是一站式线上整理全流程平台。 平台集成…

C语言 【基础语法】

一、编程环境搭建 编译器:gcc 集成开发环境:vscode 1.1 安装vscode 1.2 设置中文包 插件 1.3 设置C/C扩展 安装 C/C Compile Run extension 和 C/C Extension Pack 扩展 二、基础语法 2.1 第一个c语言程序 2.2 数据类型 2.2.1 变量的语法(重点) …

漏洞及漏洞管理

01 漏洞基础 原则上,漏洞是指系统或网络中的一个脆弱点,其可能会被网络犯罪分子利用,以获得未经 授权的访问,从而造成破坏。漏洞利用之后会发生什么呢,谁也说不准——安装恶意软件、 窃取敏感数据、利用恶意代码造成…

【QT进阶】Qt Web混合编程之QWebEngineView基本用法

往期回顾 【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左,文本水平的效果-CSDN博客【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍-CSDN博客 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用-CSDN博客 【QT进阶】Qt Web混合编程之QWebEngi…

node.js-fs模块、path模块

fs模块-读写文件 模块:类似插件,封装了方法/属性 fs模块:封装了与本机文件系统进行交互的,方法/属性 语法: 1)加载fs模块对象 const fsrequire(fs)//fs 是模块标识符:模块的名字 2&#x…

文献学习-38-用于增量组织病理学分类的内存高效提示调整

​ Memory-Efficient Prompt Tuning for Incremental Histopathology Classification Authors: Yu Zhu, Kang Li, Lequan Yu, Pheng-Ann Heng Source: The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24) ​​ Abstract 最近的研究在组织病理学分类方面…

Python教学入门:流程控制

条件语句(if 语句): 条件语句用于根据条件的真假执行不同的代码块。 x 10if x > 0: # 如果 x 大于 0print("x 是正数") # 输出:x 是正数 elif x 0: # 如果 x 等于 0print("x 是零") else: # 如果以…

Python基于Django的旅游城市关键词分析和提取,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…