首页 > 编程语言 >Java 中的日期时间类运算:Date、LocalDateTime 与 Hutool 的 LocalDateTimeUtil(详细用法)

Java 中的日期时间类运算:Date、LocalDateTime 与 Hutool 的 LocalDateTimeUtil(详细用法)

时间:2024-09-15 20:20:06浏览次数:12  
标签:Java String Hutool LocalDateTimeUtil date 时间 LocalDateTime Date now

在 Java 编程中,处理日期和时间是一项常见的任务。Java 提供了多种日期和时间相关的类来满足不同的需求,其中Date类是较早引入的日期时间处理类,而LocalDateTime是 Java 8 之后引入的更加强大、易用的日期时间类。此外,Hutool 工具库中的LocalDateTimeUtil为LocalDateTime的操作提供了更多便捷的方法。本文将详细介绍这三个日期时间处理相关的内容,包括它们的关键要点、用法示例等。

一,Date

1,创建Date对象,获取当前时间,格式转换

public class Main {
    public static void main(String[] args) {
        //创建Date对象及获取当前时间
        Date date = new Date(); //输出为Sun Sep 15 17:14:57 CST 2024
        //时间转换器
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //格式化时间
        String format = simpleDateFormat.format(date);//输出为2024-09-15 17:14:57
        }
}

格式转换通用字母(可自定义,但不推荐)

2,获取指定时期

Date date=new Date();
//获取指定日期的年
String year=String.format("%tY", date);
//获取指定日期的月
String mon=String .format("%tm", date);
//获取指定日期的日
String day=String .format("%td", date);
//获取指定日期的时
String h=String .format("%tH", date);
//获取指定日期的分
String ms=String .format("%tM", date);
//获取指定日期的秒
String s=String .format("%tS", date);

 在String.format方法中,%t是一个格式化指令的开始部分,用于格式化日期和时间相关的值。
紧跟在%t后面的字符(如这里的Y)指定了日期或时间的特定组成部分的格式化方式。

3,设置、修改时间

//设置时间
Date date = new Date(2024, 9, 15);
//修改时间
date.setYear(2025);//修改年份
date.setMonth(10);//修改月份
date.setDate(16);//修改日
date.setTime(1600000);//修改时间毫秒值

4,计算

由于Date类的get方法属于时间毫秒值(及long类型)所以可以直接进行计算

 //Date的计算
 date=new Date(date.getTime()+1000000);//1000000毫秒后

5, Date转LocalDateTime

// 获取当前时间
Date date = new Date();
// 获取当前时区
ZoneId zoneId = ZoneId.systemDefault();
// 将Date转换为LocalDateTime
LocalDateTime localDateTime = date.toInstant().atZone(zoneId).toLocalDateTime();

二、LocalDateTime

1,创建LocalDateTime对象,获取当前时间,格式转换

创建对象并获取当前时间

//创建一个LocalDateTime对象,并获取当前时间
LocalDateTime localDateTime = LocalDateTime.now();//输出结果为2024-09-15T17:56:41.062125800
//创建一个LocalDate对象,并获取当前日期
LocalDate localDate = LocalDate.now();//输出结果为2024-09-15
//创建一个LocalTime对象,并获取当前时间
LocalTime localTime = LocalTime.now();//输出结果为17:56:41.062125800

格式化时间

//对LocalDateTime对象进行格式化
String formattedDateTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"));
System.out.println(formattedDateTime);//输出结果为2024年09月15日 17时56分41秒
//对LocalDate对象进行格式化
String formattedDate = localDate.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
System.out.println(formattedDate);//输出结果为2024年09月15日
//对LocalTime对象进行格式化
String formattedTime = localTime.format(DateTimeFormatter.ofPattern("HH时mm分ss秒"));
System.out.println(formattedTime);//输出结果为17时56分41秒

 2,获取指定时间

LocalDate localDate = LocalDate.of(2023, 1, 1);//输出结果2023-01-01
LocalTime localTime = LocalTime.of(12, 30, 30);//输出结果12:30:30
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);//合并前两项输出结果2023-01-01T12:30:30

3,设置,修改时间 

//LocalDateTime设置时间
LocalDateTime now = LocalDateTime.of(2023, 1, 1, 12, 0);
//LocalDateTime修改时间
now=now.withYear(2024);//修改年份
now=now.withMonth(2);//修改月份
now=now.withDayOfMonth(3);//修改日:根据月份
now=now.withDayOfYear(4);//修改日:根据年份
now=now.withHour(5);//修改时
now=now.withMinute(6);//修改分
now=now.withSecond(7);//修改秒
now=now.withNano(8);//修改纳秒

 4,计算

LocalDateTime now = LocalDateTime.now();
LocalDateTime localDateTime1 = now.plusDays(1);//加一天
LocalDateTime localDateTime2 = now.minusDays(1);//减一天
LocalDateTime localDateTime3 = now.plusHours(1);//加一小时
LocalDateTime localDateTime4 = now.minusHours(1);//减一小时
LocalDateTime localDateTime5 = now.plusMinutes(1);//加一分钟
LocalDateTime localDateTime6 = now.minusMinutes(1);//减一分钟
LocalDateTime localDateTime7 = now.plusSeconds(1);//加一秒
LocalDateTime localDateTime8 = now.minusSeconds(1);//减一秒
LocalDateTime localDateTime9 = now.plusMonths(1);//加一个月
LocalDateTime localDateTime10 = now.minusMonths(1);//减一个月
LocalDateTime localDateTime11 = now.plusYears(1);//加一年
LocalDateTime localDateTime12 = now.minusYears(1);//减一年

这里的数可以是负数所以只需要记住一个就行(一般是加的)

5,比较

//LocalDateTime的比较
LocalDateTime a = LocalDateTime.of(2023, 1, 1, 0, 0);
LocalDateTime b = LocalDateTime.of(2023, 1, 1, 0, 0);
LocalDateTime c = LocalDateTime.of(2023, 1, 1, 0, 1);
//比较a是否等于b
System.out.println(a.isEqual(b));//true
//比较a是否小于c
System.out.println(a.isBefore(c));//true
//比较a是否大于c
System.out.println(a.isAfter(c));//false

 6,LocalDateTime转Date

//获取当前时间
LocalDateTime localDateTime = LocalDateTime.now();
//获取当前时区
ZoneId zoneId = ZoneId.systemDefault();
//转换为Date
Date date = Date.from(localDateTime.atZone(zoneId).toInstant());

 三、Hutool 的 LocalDateTimeUtil常用方法介绍

1、format(LocalDateTime dateTime)(格式化方法)

// 获取当前时间
LocalDateTime now = LocalDateTime.now();
// 格式化时间
String formatted = LocalDateTimeUtil.format(now, "yyyy - MM - dd HH:mm:ss");
System.out.println(formatted);//输出:2023 - 07 - 06 16:09:02

2、offset(LocalDateTime dateTime, long amount, TemporalUnit unit)(时间偏移方法)

LocalDateTime dateTime = LocalDateTime.now();
// 当前时间加2小时,dateTime:现在的时间,2:小时,ChronoUnit.HOURS:时间单位
LocalDateTime offsetDateTime = LocalDateTimeUtil.offset(dateTime, 2, ChronoUnit.HOURS);

3、now()(获取当前时间)

LocalDateTime now = LocalDateTimeUtil.now();

4、of(Date date/long timestamp)和toEpochMilli(LocalDateTime dateTime)(对象转换)

// Date时间对象
Date date = new Date();
// 时间毫秒值
long timestamp = date.getTime();
// LocalDateTime时间对象
LocalDateTime localDateTime = LocalDateTime.now();

// 时间转换
// Date转LocalDateTime
LocalDateTime localDateTime1 = LocalDateTimeUtil.of(date);
// 时间毫秒值转LocalDateTime
LocalDateTime localDateTime2 = LocalDateTimeUtil.of(timestamp);
//LocalDateTime转时间毫秒值
long timestamp1 = LocalDateTimeUtil.toEpochMilli(localDateTime);

5、between(LocalDateTime start, LocalDateTime end)(计算两个 LocalDateTime 对象之间的时间差,返回 Duration 对象。)

LocalDateTime start = LocalDateTime.of(2023, 10, 1, 12, 0, 0);
LocalDateTime end = LocalDateTime.of(2023, 10, 1, 14, 30, 0);

// 计算时间差,输出:PT2H30M (PT:时间差)
Duration duration = LocalDateTimeUtil.between(start, end);

 6、parse(String text)(将字符串解析为 LocalDateTime 对象,默认使用 yyyy-MM-dd HH:mm:ss 格式。)

String dateStr = "2023-10-01 12:30:45";
LocalDateTime localDateTime = LocalDateTimeUtil.parse(dateStr);

在 Java 中,处理日期时间的需求可以通过Date、LocalDateTime以及 Hutool 的LocalDateTimeUtil来满足。Date类是早期的日期时间处理类,虽然能完成基本的任务但存在诸多不便。LocalDateTime类是 Java 8 之后的改进版本,提供了更直观、易用的操作方法。而 Hutool 的LocalDateTimeUtil则进一步补充和简化了LocalDateTime的操作,在实际开发中,根据项目需求和开发环境,可以灵活选择合适的日期时间处理方式。无论是简单的日期获取、日期比较,还是复杂的日期格式化和区间计算,这些工具都能帮助开发者高效地处理日期时间相关的业务逻辑。

标签:Java,String,Hutool,LocalDateTimeUtil,date,时间,LocalDateTime,Date,now
From: https://blog.csdn.net/weixin_70171141/article/details/142286547

相关文章

  • 【Java面试】第十一天
    ......
  • Java开发环境 第二章(Java Developer environment on Windows 10 Chapter 2)
    第二章IdeaMaven安装与设置1.Idea安装(下载请至idea官网)一路默认,下一步至完成2.IdeaMaven配置a.idea注册码获取,还请自行搜索"idea激活码"或"idea破解"b.创建测试项目新建项目选择JDK项目位置c.配置Maven(maven仓库请自行搜索下载)注意修改sett......
  • Java开发手册(初级)
    文章目录前言2API基础篇2.1Scanner类2.2Random类3API进阶篇3.1String类3.1.1代码示例3.1.2==和equals方法的区别3.2StringBuilder类3.2.1代码示例3.2.2链式编程3.3StringJoiner类3.4Math类3.5System类3.6Runtime类3.7Object类前言      ......
  • Java中常见的并发问题与解决方案
    Java中常见的并发问题与解决方案内容概述多线程编程是Java中构建高性能应用程序的重要部分。然而,并发带来了诸多问题,尤其在多个线程访问共享资源时,容易引发如死锁、竞态条件等问题。这些问题如果处理不当,会导致程序行为不可预测,甚至崩溃。本文将分析Java中常见的并发问题,并介......
  • Java毕设项目II基于SSM的汽车在线租赁管理系统
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着汽车保有量的持续增长和共享经济理念......
  • 计算机毕业设计选题推荐-在线投票系统-Java/Python项目实战
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • Java毕设项目II基于SSM的宠物综合服务平台的设计与实现
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着生活水平的提高和人们对情感寄托需求......
  • Java开发环境(Java Developer environment on Windows 10)
    一、Windows10下JDK8安装与配置(JDK8installationAndConfigurationforWindows10)1.安装(installJDK8)a.注意安装路径,后面环境变量配置需要用到2.配置(config)a.windows键->设置(press"windows"key,click"set"button)在设置下输入`环境`搜索,选择"编......
  • JavaScript DOM
    一、DOM简介1、简介​DocumentObjectModel文档对象模型​浏览器加载HTML文档时,会将HTML文档解析为一个树形结构,称为DOM树HTML文档和DOM树是一一对应的关系当DOM树被改变时,与之对应的HTML文档也会随之改变当需要对HTML中的内容进行动态改变时,可以使用DOM来进行操作DOM......
  • java常见设计模式
      Java设计模式是经过验证的、用于解决常见软件设计问题的标准化解决方案。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。以下列出一些常见的设计模式,并附上每个模式的简单说明和Java示例。 1.单例模式(SingletonPattern)-创建型模式目的......