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

在 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的操作,在实际开发中,根据项目需求和开发环境,可以灵活选择合适的日期时间处理方式。无论是简单的日期获取、日期比较,还是复杂的日期格式化和区间计算,这些工具都能帮助开发者高效地处理日期时间相关的业务逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值