Java 8 中 常用的 LocalDateTime 操作
发布时间:2025-05-23 12:26:32 发布人:远客网络
一、Java 8 中 常用的 LocalDateTime 操作
Java开发中,我们经常需要进行各种时间格式的转换,以下是一些常见操作。
例如,获取当天的初始时间和结束时间,或者计算时间差。有时,根据业务需求,我们可能需要获取上个月的时间,或者推迟几分钟、几小时的时间等。在Java 8之后,官方提供了现成的时间工具来方便我们使用。接下来,让我们一起来探索一下这些工具吧。
在上面的代码中,最关键的是minusMinutes和plusMinutes这两个方法。从字面上看,它们的意思不难理解。同样地,我们可以在工具类中查看其他的方法。
在plusMinutes方法上右击,选择“转到”,然后选择“实现”、“声明”或“用例”,就可以进入到LocalDateTime.java类中。在Mac上,按快捷键command+ 7;在Windows上,按快捷键Alt+ 7,会显示类的主结构。
从下图中,我们可以看到官方提供了许多现有的方法,基本满足了我们日常的使用需求。
上面的方法大多容易理解,其中minusNanos方法可以减去指定的纳秒数,我们可以通过以下实践来了解它:
plusNanos和其他相关方法就不演示了,相信大家能够举一反三。
现在业务需要我们获取当前小时开始的时间,例如2022-10-01 10:00:00。
tempTime= tempTime.withMinute(0).withSecond(0).withNano(0);
注意:tempTime操作完成后需要返回值接收,否则不会改变原有的值。
可以看到,这里使用了三个with方法。
有人可能会尝试给分钟设置61...,我们来试一下,会报错如下:
现在业务需要我们判断传入的参数不能大于当前时间,我们可以通过以下方法和示例来解决这个问题:
二、java localtime
java localtime是什么,让我们一起了解一下?
localtime是把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtime函数转换后的时间没有经过时区变换,是UTC时间,在java中localtime()函数返回本地时间(一个数组)。
我们平时在程序里面所见到的UTC时间,就是零时区的时间,它的全称是Coordinated Universal Time,即世界协调时间。另一个常见的缩写是GMT,即格林威治标准时间,格林威治位于零时区,因此,我们平时说的UTC时间和GMT时间在数值上面都是一样的。
而且从Java8开始,推出了LocalDate、LocalTime、LocalDateTime这三个工具类,实现了更好地时间处理。
那么LocalTime是如何使用的?
工具类的获取与使用代码如下: import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; public class TestLocalTime { public static void main(String[] args) {//获取当前时区的日期 LocalDate localDate = LocalDate.now(); System.out.println("localDate: " + localDate);//时间 LocalTime localTime = LocalTime.now(); System.out.println("localTime: " + localTime);//根据上面两个对象,获取日期时间 LocalDateTime localDateTime = LocalDateTime.of(localDate,localTime); System.out.println("localDateTime: " + localDateTime);//使用静态方法生成此对象 LocalDateTime localDateTime2 = LocalDateTime.now(); System.out.println("localDateTime2: " + localDateTime2);//格式化时间 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss"); System.out.println("格式化之后的时间: " + localDateTime2.format(formatter));//转化为时间戳(秒) long epochSecond = localDateTime2.toEpochSecond(ZoneOffset.of("+8"));//转化为毫秒 long epochMilli = localDateTime2.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli(); System.out.println("时间戳为:(秒) " + epochSecond + "; (毫秒): " + epochMilli);//时间戳(毫秒)转化成LocalDateTime Instant instant = Instant.ofEpochMilli(epochMilli); LocalDateTime localDateTime3 = LocalDateTime.ofInstant(instant, ZoneOffset.systemDefault()); System.out.println("时间戳(毫秒)转化成LocalDateTime: " + localDateTime3.format(formatter));//时间戳(秒)转化成LocalDateTime Instant instant2 = Instant.ofEpochSecond(epochSecond); LocalDateTime localDateTime4 = LocalDateTime.ofInstant(instant2, ZoneOffset.systemDefault()); System.out.println("时间戳(秒)转化成LocalDateTime: " + localDateTime4.format(formatter));}}
三、Java代码实现带时区时间字符串转为LocalDateTime对象
1、处理不带时区的时间字符串转换为LocalDateTime对象,可以借助Java 8中的DateTimeFormatter类。首先,定义时间字符串,接着创建DateTimeFormatter对象,定义时间字符串格式。之后,使用parse方法将时间字符串转换为LocalDateTime对象,并输出结果。值得注意的是,DateTimeFormatter对象中的时间格式需与时间字符串格式完全匹配,否则将引发DateTimeParseException异常。
2、实现带时区的时间字符串转换为LocalDateTime对象时,使用OffsetDateTime类,它能理解并处理带时区的时间。需定义日期格式化对象,确保可以解析时区时间字符串。该格式化对象的格式应为:"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"。此代码示例适用于Java版本8及以上。