日期转换运算工具类

一、日期转换运算

Java 中的日期常用转换

二、工具类

代码如下:

package com.common.utils.time;import org.apache.commons.lang3.time.DateFormatUtils;import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;public class DateUtils extends org.apache.commons.lang3.time.DateUtils {private static final int[] dayArr = new int[]{20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};private static final String[] constellationArr = new String[]{"摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"};public static final String PATTERN_FULL = "yyyy-MM-dd HH:mm:ss.SSS";public static final String PATTERN_SHORT_FULL = "yyyyMMddHHmmssSSS";public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";public static final String PATTERN_DATETIME_MINUTE = "yyyy-MM-dd HH:mm";public static final String PATTERN_DATETIME_HOUR = "yyyy-MM-dd HH";public static final String PATTERN_DATETIME_CN = "yyyy年MM月dd日HH时mm分ss秒";public static final String PATTERN_SHORT_DATETIME = "yyyyMMddHHmmss";public static final String PATTERN_DATE = "yyyy-MM-dd";public static final String PATTERN_DATE_CN = "yyyy年MM月dd日";public static final String PATTERN_SHORT_DATE = "yyyyMMdd";public static final String PATTERN_TIME = "HH:mm:ss";public static final String PATTERN_TIME_CN = "HH时mm分ss秒";public static final String PATTERN_SHORT_TIME = "HHmmss";public static final String PATTERN_YEAR = "yyyy";public static final String PATTERN_SHORT = "yyyyMMdd";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"};public DateUtils() {}public static String formatFull(Date date) {return format(date, "yyyy-MM-dd HH:mm:ss.SSS");}public static String formatDateTime(Date date) {return format(date, "yyyy-MM-dd HH:mm:ss");}public static String formatDateTimeCN(Date date) {return format(date, "yyyy年MM月dd日HH时mm分ss秒");}public static String formatShortDateTime(Date date) {return format(date, "yyyyMMddHHmmss");}public static String formatDate(Date date) {return format(date, "yyyy-MM-dd");}public static String formatYear(Date date) {return format(date, PATTERN_YEAR);}public static String formatShort(Date date) {return format(date, PATTERN_SHORT);}public static String formatDateCN(Date date) {return format(date, "yyyy年MM月dd日");}public static String formatShortDate(Date date) {return format(date, "yyyyMMdd");}public static String formatTime(Date date) {return format(date, "HH:mm:ss");}public static String formatTimeCN(Date date) {return format(date, "HH时mm分ss秒");}public static String formatShortTime(Date date) {return format(date, "HHmmss");}public static String format(Date date, String pattern) {SimpleDateFormat formatTime = new SimpleDateFormat(pattern);return formatTime.format(date);}public static Date parseFull(String date) {return parse(date, "yyyy-MM-dd HH:mm:ss.SSS");}public static Date parseShortFull(String date) {return parse(date, "yyyyMMddHHmmssSSS");}public static Date parseDateTime(String date) {return parse(date, "yyyy-MM-dd HH:mm:ss");}public static Date parseShortDateTime(String date) {return parse(date, "yyyyMMddHHmmss");}public static Date parseDate(String date) {return parse(date, "yyyy-MM-dd");}public static Date parseDate(Date date) {String value = formatDate(date);return parse(value, "yyyy-MM-dd");}public static Date parseShortDate(String date) {return parse(date, "yyyyMMdd");}public static Date parseTime(String date) {return parse(date, "HH:mm:ss");}public static String nowDateTime() {return formatDateTime(new Date());}public static String nowDate() {return formatDate(new Date());}public static String nowShortDate() {return formatShortDate(new Date());}public static String nowTime() {return formatTime(new Date());}public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static String nowShort() {return format(new Date(), PATTERN_SHORT);}public static Date parse(String date, String pattern) {SimpleDateFormat formatTime = new SimpleDateFormat(pattern);try {return formatTime.parse(date);} catch (ParseException var4) {throw new IllegalArgumentException("parse error.date:" + date + " pattern" + pattern);}}public static String getSysYear() {Calendar calendar = Calendar.getInstance();return String.valueOf(calendar.get(Calendar.YEAR));}public static String getSysYearDetail() {int year = LocalDateTime.now().getYear();LocalDateTime localDateTime = LocalDateTime.of(year,12,31,23,59,59);return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}public static String getWeekOfDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);switch(calendar.get(7)) {case 1:return "周日";case 2:return "周一";case 3:return "周二";case 4:return "周三";case 5:return "周四";case 6:return "周五";case 7:return "周六";default:return "";}}public static String getConstellation(int month, int day) {return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];}public static String getZodiac(int year) {if (year < 1900) {return "未知";} else {int start = 1900;String[] zodiacs = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};return zodiacs[(year - start) % zodiacs.length];}}public static int getAgeFromBirthDay(Date birthDay) {Calendar cal = Calendar.getInstance();cal.setTime(birthDay);Calendar now = Calendar.getInstance();if (cal.after(now)) {throw new IllegalArgumentException("The birthDay is after now.");} else {int age = now.get(1) - cal.get(1);int month = cal.get(2);int day = cal.get(5);if (month == 2 && day == 29) {if (now.get(2) < 2) {--age;}} else if (cal.get(2) > now.get(2) || cal.get(2) == now.get(2) && cal.get(5) > now.get(5)) {--age;}return age;}}/*** 返回 年月日小时分秒** @return yyyyMMddHHmmss*/public static String getTodayChar14() {return DateUtils.format(new Date(), "yyyyMMddHHmmss");}/*** 返回 年月日** @return yyyyMMdd*/public static String getTodayChar15() {return DateUtils.format(new Date(), "yyyyMMdd");}/*** 返回 年月日小时分秒 毫秒** @return yyyyMMddHHmmssS*/public static String getTodayChar17() {String dateString = DateUtils.format(new Date(), "yyyyMMddHHmmss");int length = dateString.length();if (length < 17) {String endStr = dateString.substring(14, length);int len = endStr.length();for (int i = 0; i < 3 - len; i++) {endStr = "0" + endStr;}dateString = dateString.substring(0, 14) + endStr;}return dateString;}public static Date getDateNow() {return new Date();}public static LocalDate getLocalDateNow() {return LocalDate.now();}public static LocalDateTime getLocalDateTimeNow() {return LocalDateTime.now();}public static Long getTimestampNow() {Calendar calendar = Calendar.getInstance();long timestamp = calendar.getTimeInMillis();return timestamp;}//Date -> 毫秒时间戳public static String dateToTimeStampTime(Date date) {long time = date.getTime();return String.valueOf(time);}//Date -> LocalDateTimepublic static LocalDateTime dateToLocalDateTime(Date date) {Instant instant = date.toInstant();ZoneId zone = ZoneId.systemDefault();return LocalDateTime.ofInstant(instant, zone);}//Date -> LocalDatepublic static LocalDate dateToLocalDate(Date date) {LocalDateTime localDateTime = dateToLocalDateTime(date);return localDateTime.toLocalDate();}//Date -> LocalTimepublic static LocalTime dateToLocalTime(Date date) {LocalDateTime localDateTime = dateToLocalDateTime(date);return localDateTime.toLocalTime();}//timeStamp时间戳 -> Datepublic static Date timeStampToDate(Long timeStamp) {String dateString = sdf.format(new Date(timeStamp)); // Date对象转换为字符串Date date = null; // 字符串转换为Date对象try {date = sdf.parse(dateString);} catch (ParseException e) {e.printStackTrace();}return date;}//LocalDateTime -> Datepublic static Date localDateTimeToDate(LocalDateTime localDateTime) {ZoneId zone = ZoneId.systemDefault();Instant instant = localDateTime.atZone(zone).toInstant();return Date.from(instant);}//LocalDate -> Datepublic static Date localDateToDate(LocalDate localDate) {ZoneId zone = ZoneId.systemDefault();Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();return Date.from(instant);}//LocalTime -> Datepublic static Date localTimeToDate(LocalTime localTime) {LocalDate localDate = LocalDate.now();ZoneId zone = ZoneId.systemDefault();Instant instant = LocalDateTime.of(localDate, localTime).atZone(zone).toInstant();return Date.from(instant);}//LocalDateTime 增加多少秒public static LocalDateTime localDateTimePlusSecond(LocalDateTime localDateTime, Long second) {LocalDateTime time = localDateTime.plusSeconds(second);return time;}//两个LocalDateTime相差多少毫秒public static Long durationMillis(LocalDateTime start, LocalDateTime end){Duration duration = Duration.between(start,end);long millis = duration.toMillis();return millis;}//两个Date相差多少相差多少毫秒public static Long durationMillis(Date start, Date end){Duration duration = Duration.between(dateToLocalDateTime(start),dateToLocalDateTime(end));long millis = duration.toMillis();return millis;}//两个LocalDateTime相差多少秒public static Long durationSeconds(LocalDateTime start, LocalDateTime end){Duration duration = Duration.between(start,end);long seconds = duration.getSeconds();return seconds;}//两个Date相差多少相差多少秒public static Long durationSeconds(Date start, Date end){Duration duration = Duration.between(dateToLocalDateTime(start),dateToLocalDateTime(end));long seconds = duration.getSeconds();return seconds;}//将秒转化为时分秒的格式public static String formatHMS(long second) {int temp = (int) second;int hh = temp / 3600;int mm = (temp % 3600) / 60;int ss = (temp % 3600) % 60;return (hh < 10 ? ("0" + hh) : hh) + ":" +(mm < 10 ? ("0" + mm) : mm) + ":" +(ss < 10 ? ("0" + ss) : ss);}/*** 计算是否超时,超时多久* @param start 开始时间* @param second 超时几秒钟* @param now 当前时间* @return*/public static Long durationSeconds(Date start, long second, Date now){LocalDateTime time = dateToLocalDateTime(start);LocalDateTime startTime = localDateTimePlusSecond(time, second);LocalDateTime endTime = dateToLocalDateTime(now);Duration duration = Duration.between(startTime,endTime);long seconds = duration.getSeconds();return seconds;}/*** 增加 LocalDateTime ==> Date*/public static Date toDate(LocalDateTime temporalAccessor){ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());return Date.from(zdt.toInstant());}/*** 增加 LocalDate ==> Date*/public static Date toDate(LocalDate temporalAccessor){LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());return Date.from(zdt.toInstant());}/*** 获取当前日期, 默认格式为yyyy-MM-dd** @return String*/public static String getDate(){return dateTimeNow(PATTERN_DATE);}public static final String getTime(){return dateTimeNow(PATTERN_DATETIME);}public static final String dateTimeNow(){return dateTimeNow(PATTERN_SHORT_DATETIME);}public static final String dateTimeNow(final String format){return parseDateToStr(format, new Date());}public static final String dateTime(final Date date){return parseDateToStr(PATTERN_DATE, date);}public static final String parseDateToStr(final String format, final Date date){return new SimpleDateFormat(format).format(date);}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 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 + "分钟";}public static Date addHour(Date time, int hour) {Calendar calendar = Calendar.getInstance();calendar.setTime(time);calendar.add(Calendar.HOUR_OF_DAY, hour);return calendar.getTime();}}

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

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

相关文章

关于MySQL数据库和数据表的基础

目录 一. 数据库的基础SQL 1. 创建数据库 2. 查看当前有哪些数据库 3. 选中数据库 4. 删除数据库 5. 小结 二. 数据表的基础SQL 1. 创建数据表 2. 查看当前数据库中有哪些表 3. 查看指定表的详细情况(查看表的结构) 4. 删除表 5. 小结 一. 数据库的基础SQL 1. 创建…

史上最全排序算法整理!(1)

1.排序的概念及其应用 1.1排序的概念 排序是计算机内经常进行的一种操作&#xff0c;其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序&#xff0c;若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序。反之&#…

实战解析:爬取音乐每日推荐歌单并自动分享

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、准备阶段 三、实战步骤 四、总结与展望 一、引言 在数字化时代&#xff0c…

C语言什么是内存越界?什么是内存泄露?⼆者是如何产⽣的?

一、问题 什么是内存越界&#xff1f;什么是内存泄露&#xff1f;分别是如何造成的&#xff1f; 二、解答 1. 内存越界 内存越界就是成功地分配了内存&#xff0c;并且⼰经初始化&#xff0c;但是在操作过程中越过了内存的边界。应⽤如下代码对内存越界进⾏说明。 char *pl …

Gartner发布评估威胁情报计划有效性指南:评估威胁情报有效性的四个步骤

许多组织都在努力实施 TI 并评估其价值。安全和风险管理领导者必须使用优先情报要求来评估其 TI 计划的有效性&#xff0c;并根据其组织战略完善该计划。 主要发现 尽管许多组织已将威胁情报 (TI) 纳入其安全计划&#xff0c;但他们很难评估其性能、成熟度以及在相关产品和服务…

random模块一

random模块 用于生成随机数。 random()返回[0,1)之间随机浮点数 例子&#xff1a; import randomfor i in range(5):print(random.random()) 结果&#xff1a; 0.5026620465128847 0.9841750667006002 0.5515465602585887 0.42796563433917456 0.2627959451391586 see…

糖尿病视网膜病变分级新方法:卷积网络做分割和诊断 + 大模型生成详细的测试和治疗建议

糖尿病视网膜病变分级新方法&#xff1a;卷积网络做分割和诊断 大模型生成详细的测试和治疗建议 提出背景相关工作3.1 数据集3.1.1 病变分割 3.1.2 图像分级3.1.3 大型语言模型&#xff08;LLMs&#xff09; 解法 数据预处理 数据增强 网络架构 训练过程 测试过程子解法1…

【408真题】2009-25

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

关于智能若干问题的思考

摘要 提升人工智能系统的通用性是人类追求的目标。随着科技的发展&#xff0c;人工智能已经从 单一任务的解决者发展为能够适应复杂环境、理解人类需求并进行自主决策的系统。但不 可否认的是&#xff0c;当前的人工智能水平仍远未实现通用人工智能&#xff0c;智能问题是实现通…

【数据结构与算法 | 队列篇】力扣102, 107

1. 力扣102 : 二叉树的层序遍历 (1). 题 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3]…

C# 编程基础:注释、变量、常量、数据类型和自定义类型

C# 是一种功能强大的面向对象编程语言&#xff0c;它提供了丰富的特性来帮助开发者编写清晰、高效的代码。本文将介绍C#中的注释、变量、常量、基本数据类型以及如何创建和使用自定义类型。 注释 注释用于解释代码的目的&#xff0c;它们不会被程序执行。 单行注释使用 //。…

动手学深度学习(Pytorch版)代码实践-深度学习基础-01基础函数的使用

01基础函数的使用 主要内容 张量操作&#xff1a;创建和操作张量&#xff0c;包括重塑、填充、逐元素操作等。数据处理&#xff1a;使用pandas加载和处理数据&#xff0c;包括处理缺失值和进行one-hot编码。线性代数&#xff1a;包括矩阵运算、求和、均值、点积和各种范数计算…

STM32FLASH闪存

文章目录 前言首先来回顾一下存储器映像FLASH简介闪存模块组织Flash基本结构&#xff08;关系&#xff09;图Flash解锁使用指针访问存储器FLASH操作Flash全擦除Flash页擦除Flash写入 选项字节选项字节操作选项字节擦除选项字节写入 器件电子签名注意闪存控制寄存器一览 前言 本…

[leetcode hot 150]第一百九十一题,位1的个数

题目&#xff1a; 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中设置位的个数&#xff08;也被称为汉明重量&#xff09;。 这道题比较简单&#xff0c;直接对最后一位进行与1的与操作&#xff0c;然…

Shell 编程之正则表达式与文本处理器

一、正则表达式 1.1 正则表达式概述 1. 正则表达式的定义 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex 、 regexp 或 RE 。 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串&#xff0c;简单来说&#xff0c; 是一种匹配字符串…

RTPS协议之Messages Module

目录 Messages ModuleType定义RTPS消息结构RTPS消息头子消息结构 RTPS消息接收者SubmessageElementsRTPS HeaderRTPS Submessages Messages Module RTPS Writer和RTPS Reader之间的交换数据的消息。 Type定义 TypePurposeProtocolId_tSubmessageFlagsub msg flagSubmessageK…

第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计

第16章-超声波跟随功能 无PID跟随功能 //超声波跟随if(HC_SR04_Read() > 25){motorForward();//前进HAL_Delay(100);}if(HC_SR04_Read() < 20){motorBackward();//后退HAL_Delay(100);}PID跟随功能 在pid.c中定义一组PID参数 tPid pidFollow; //定距离跟随PIDpidFol…

越来越多的连锁企业选择开源连锁收银系统

连锁企业的收银系统作为其信息化的基础&#xff0c;随着运营的复杂化&#xff0c;越来越多的连锁企业选择开源连锁收银系统来满足其日常经营需要。商淘云为大家分享连锁企业选择开源连锁收银系统的三大原因&#xff0c;大家点赞收藏。 首先是灵活性和定制性强&#xff0c;连锁企…

网络故障与排除(一)

一、Router-ID冲突导致OSPF路由环路 路由器收到相同Router-ID的两台设备发送的LSA&#xff0c;所以查看路由表看到的OSPF缺省路由信息就会不断变动。而当C1的缺省路由从C2中学到&#xff0c;C2的缺省路由又从C1中学到时&#xff0c;就形成了路由环路&#xff0c;因此出现路由不…

登录安全分析报告:小米官网注册

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …