在 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