【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,一经查实,立即删除!

相关文章

LeetCode 2007.从双倍数组中还原原数组:哈希表——从nlogn到n

【LetMeFly】2007.从双倍数组中还原原数组:哈希表——从nlogn到n 力扣题目链接:https://leetcode.cn/problems/find-original-array-from-doubled-array/ 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original …

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

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * 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…

自用-常用词

PHP 常用 file_put_contents("awlog.txt", ---time:.date(Y-m-d H:i:s,time()).---xml:.$GLOBALS[HTTP_RAW_POST_DATA].var_export($_POST,TRUE).PHP_EOL, FILE_APPEND); error_reporting(0); register_shutdown_function(function(){ var_dump(error_get_last()…

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

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

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

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

C# argb格式的raw文件转换为RGB文件

在C#中,如果你想将一个ARGB格式的raw文件转换为RGB格式的raw文件,你需要遍历原始数据,忽略Alpha通道(透明度),并仅保留RGB值。 ARGB格式中每个像素占用32位(8位Alpha,8位Red&#x…

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…

最短路径算法(Dijkstra算法、Floyd-Warshall算法)

最短路径算法是解决图论中节点之间最短路径问题的经典算法。以下是两种常见的最短路径算法:Dijkstra算法和Floyd-Warshall算法。 Dijkstra算法 Dijkstra算法用于解决单源最短路径问题,即给定一个起点,找到起点到其他所有节点的最短路径。 …

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

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

【经典算法】 leetcode88.合并排序的数组(Java/C/Python3实现含注释说明,Easy)

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还…

学习循环神经网络(RNN)

1. 掌握基础知识 理解RNN的基本概念:RNN是一种神经网络,它包含循环,使得网络能够维持一个内部状态,从而对序列的元素进行处理。学习RNN的工作机制:了解RNN是如何通过时间步迭代处理信息的,以及如何利用前一…

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 变量的语法(重点) …