当前位置: 首页 > news >正文

LocalDateTime使用

开发中常常需要用到时间,随着jdk的发展,对于时间的操作已经摒弃了之前的Date等方法,而是采用了LocalDateTime方法,因为LocalDateTime是线程安全的。

下面我们来介绍一下LocalDateTime的使用。

时间转换

将字符串转换为时间格式

前后端交互的过程中,前端传的是字符串类型,那在进行时间比较之前,我们需要将字符串转为我们的时间格式。

其中DateTimeFormatter是在一种时间格式设置的工具

//将字符串转换为时间格式
@Test
public void testToDate(){//时间格式设置DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");//将字符串转换为时间LocalDateTime localDateTime = LocalDateTime.parse("20230923 23:12", dateTimeFormatter);System.out.println("字符串转换为时间:"+localDateTime);
}

运行结果:

将时间转换为字符串

如何将时间转换为字符串呢?同样地,需要先设置一个转换格式。

//将时间转换为字符串
@Test
public void testToString(){//时间格式设置DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");//获取当前时间LocalDateTime now = LocalDateTime.now();//将时间转换为字符串String nowString = now.format(dateTimeFormatter);System.out.println("时间转换为字符串:"+nowString);
}

运行结果:

获取当前时间

//@Test
public void testGetNow(){//获取当前时间LocalDateTime now = LocalDateTime.now();System.out.println("当前时间为:"+now);
}

运行结果:

以上就是获取当前的时间,并且输入的格式是ISO 8601的格式。

计算两个时间的差距

Duration是一种计算时间差的一个类,其中有两个入参,开始时间和结束时间。并且在该类中提供了多种方法,满足我们的需求:

//计算两个时间的差距
@Test
public void testTimeBetween(){DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");LocalDateTime parse = LocalDateTime.parse("20230221 21:16", dateTimeFormatter);//时间差距Duration between = Duration.between(parse,LocalDateTime.now());//将时间差转换为以天为单位long days = between.toDays();//将时间差转为以分钟为单位long minutes = between.toMinutes();//将时间差转为以小时为单位long hours = between.toHours();System.out.println(days);System.out.println(minutes);System.out.println(hours);
}

 计算两个日期的差值

当我们在实际的开发中,只涉及到日期的操作,我们也可以使用DateTimeFormatter进行日期转换。获取今天的日期可以使用:

LocalDate now = LocalDate.now();

但是在计算两个日期的差值是不能使用Duration了需要用到Period。但是这个只会计算出天数位的差值,和年、月没有关系。要计算真正的日期差值,可以使用until。

//计算两个日期的差值
@Test
public void testPeriod(){DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");LocalDate parse = LocalDate.parse("20230121", dateTimeFormatter);//时间差距,注意这个只会计算出天数位的查找和月,年没有关系。//Period between = Period.between(parse,LocalDate.now());//两个日期之间相差了多少天//System.out.println(between.getDays());//计算两个日期真正相差多少天long until = parse.until(LocalDate.now(), ChronoUnit.DAYS);System.out.println("相差:"+until);
}

运行结果:

怎样将时间转换为时间戳

我们都知道LocalDateTime是没有带时区的,那我们将它转为时间戳的时候需要带上时区信息。

//将时间转换为时间戳
@Test
public void testToInstant(){LocalDateTime now = LocalDateTime.now();long l = now.toInstant(ZoneOffset.ofHours(8)).toEpochMilli() / 1000;System.out.println("l: " + l);//输出 l: 1677116982Instant instant = now.toInstant(ZoneOffset.ofHours(8));long epochSecond = instant.getEpochSecond();System.out.println("epochSecond:"+epochSecond);//输出 输出 epochSecond: 1677116982//将时间戳转换为时间LocalDateTime dateTime = LocalDateTime.ofEpochSecond(1677116982L, 0 ,ZoneOffset.ofHours(8));System.out.println(dateTime);
}

如上的代码中,toInstant就是将时间转为时间戳的方法,ZoneOffset.ofHours(8)就是时区偏移8小时,就是北京时间。

查看几分钟前的时间

@Test
public void test(){//minutes分钟之前的时间Integer minutes = 3;Instant instant = Instant.now().minus(Duration.ofMinutes(minutes));System.out.println(instant.atZone(ZoneId.systemDefault()));
}

运行结果:

http://www.lryc.cn/news/17846.html

相关文章:

  • 设计模式学习笔记 - 外观模式
  • 如何写出一份优秀的简历和求职信?
  • OpenGL超级宝典学习笔记:原子计数器
  • 深圳/东莞/惠州师资比较强的CPDA数据分析认证
  • LeetCodeHOT100热题02
  • 虹科Dimetix激光测距仪在锯切系统中的应用
  • FreeRTOS入门(02):任务基础使用与说明
  • ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据
  • Linux:共享内存api使用
  • android9.0 java静态库操作JNI实例 动态注册
  • 自定义复杂图片水印
  • 文章读后感——《人间清醒,内容为王》
  • 51单片机入门 - 驱动多位数码管
  • Java进击框架:Spring(一)
  • Java笔记(18)
  • 【免费教程】地下水环境监测技术规范HJ/T164-2020解读使用教程
  • Html 代码学习
  • 如何通过IP找到地址?
  • 业务单据堆积如山?如何提升会计做账效率?
  • 华为OD机试题,用 Java 解【VLAN 资源池】问题
  • 面试加分项:JVM 锁优化和逃逸分析详解
  • C++继承、构造函数和析构函数
  • Python如何实现异步并发之async(1)
  • 震撼!阿里首次开源 Java 10万字题库,Github仅一天星标就超60K
  • 十三、RESTful API
  • 路由器防火墙配置(14)
  • 灰狼算法优化VMD对时序信号分析python
  • 微服务架构中的多级缓存设计还有人不懂?
  • 【图神经网络 医学/药物/目标/分子/(结构/相互作用)预测】用于药物-目标相互作用预测的元集合(Metapath)异构图神经网络(MHGNN)
  • 《Java核心技术》笔记——第六章