一、转换

1、与字符串

  1. //LocalDateTime 转 字符串
  2. String str = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
  3. //字符串 转 LocalDateTime
  4. LocalDateTime localDateTime = LocalDateTime.parse("2019-06-26 19:00:00",
  5. DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

2、与Date

  1. // Date 转 LocalDateTime 与 LocalDate
  2. Date date = new Date();
  3. Instant instant = date.toInstant();
  4. ZoneId zoneId = ZoneId.systemDefault();
  5. LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
  6. LocalDate localDate = instant.atZone(zoneId).toLocalDate();
  7. //也可以使用LocalDateTime的FactoryInput()方法使用系统的默认时区
  8. LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
  9. ------------------------------------------------------------------------------------------------
  10. // LocalDateTime 转换成 Date
  11. ZoneId zoneId = ZoneId.systemDefault();
  12. ZonedDateTime zdt = localDateTime.atZone(zoneId);
  13. Date date = Date.from(zdt.toInstant());
  14. // LocalDate 转换成 Date
  15. ZoneId zoneId = ZoneId.systemDefault();
  16. ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
  17. Date date = Date.from(zdt.toInstant());

3、LocalDateTime 转 LocalDate

  1. LocalDateTime now = LocalDateTime.now();
  2. LocalDate localDate = now.toLocalDate();

二、比较

  1. String time1 = "2019-06-26 19:00:00";
  2. DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  3. LocalDateTime localDateTime = LocalDateTime.parse(time1, dtf2);
  4. System.out.println(localDateTime.isBefore(LocalDateTime.now()));//如果你的时间在当前时间之前,那么就是true
  5. System.out.println(localDateTime.isAfter(LocalDateTime.now()));//反之是否在当前时间之后就是false

三、计算日期时间差

在Java8中,我们可以使用以下类来计算日期时间差异:

  1. 1.Period
  2. 2.Duration
  3. 3.ChronoUnit

1、Period类

  1. 主要是Period类方法getYears(),getMonths()和getDays()来计算.

示例:

  1. import java.time.LocalDate;
  2. import java.time.Month;
  3. import java.time.Period;
  4. public class Test {
  5. public static void main(String[] args) {
  6. LocalDate today = LocalDate.now();
  7. System.out.println("Today : " + today);
  8. LocalDate birthDate = LocalDate.of(1993, Month.OCTOBER, 19);
  9. System.out.println("BirthDate : " + birthDate);
  10. Period p = Period.between(birthDate, today);
  11. System.out.printf("年龄 : %d 年 %d 月 %d 日", p.getYears(), p.getMonths(), p.getDays());
  12. }
  13. }

结果:

  1. Today : 2017-06-16
  2. BirthDate : 1993-10-19
  3. 年龄 : 23 7 28

2、Duration类

提供了使用基于时间的值(如秒,纳秒)测量时间量的方法。

示例:

  1. LocalDateTime now = LocalDateTime.now();
  2. Duration duration = Duration.between(now,now);
  3. long days = duration.toDays(); //相差的天数
  4. long hours = duration.toHours();//相差的小时数
  5. long minutes = duration.toMinutes();//相差的分钟数
  6. long millis = duration.toMillis();//相差毫秒数
  7. long nanos = duration.toNanos();//相差的纳秒数
  8. System.out.println(millis);

3、ChronoUnit类

ChronoUnit类可用于在单个时间单位内测量一段时间,例如天数或秒。以下是使用between()方法来查找两个日期之间的区别的示例。

示例:

  1. public static void main(String[] args) {
  2. String str1 = "2019-11-18 12:10:01";
  3. String str2 = "2019-11-18 14:12:09";
  4. LocalDateTime date1 = LocalDateTime.parse(str1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
  5. LocalDateTime date2 = LocalDateTime.parse(str2, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
  6.  
  7. Duration duration = Duration.between(date1, date2);
  8. System.out.println(duration);
  9. long days = duration.toDays(); //相差的天数
  10. long hours = duration.toHours();//相差的小时数
  11. long minutes = duration.toMinutes();//相差的分钟数
  12. long seconds = duration.toMillis() / 1000;//相差秒数
  13. System.out.println(String.format("%s小时%s分%s秒", hours, minutes - hours * 60, seconds - minutes * 60));
  14.  
  15. System.out.println("-----------------------------------------");
  16. long d = ChronoUnit.DAYS.between(date1, date2); //相差的天数
  17. long h = ChronoUnit.HOURS.between(date1, date2); //相差的小时数
  18. long m = ChronoUnit.MINUTES.between(date1, date2); //相差的分钟数
  19. long s = ChronoUnit.SECONDS.between(date1, date2); //相差秒数
  20. System.out.println(String.format("%s小时%s分%s秒", h, m - h * 60, s - m * 60));
  21. }

输出结果:

  1. PT2H2M8S
  2. 2小时28
  3. -----------------------------------------
  4. 2小时28
  5.  
  6. Process finished with exit code 0

四、日期格式化

JDK8之前:SimpleDateFormat来进⾏格式化,但SimpleDateFormat并不是线程安全的

JDK8之后:引⼊线程安全的⽇期与时间DateTimeFormatter

  1. LocalDateTime ldt = LocalDateTime.now();
  2. System.out.println(ldt);
  3. DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  4. String ldtStr = dtf.format(ldt);
  5. System.out.println(ldtStr);

获取指定的⽇期时间对象

  1. LocalDateTime ldt = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
  2. System.out.println(ldt);

Java8 日期时间API的更多相关文章

  1. Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

    通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...

  2. 都9012了,Java8中的日期时间API你还没有掌握?

    一,Java8日期时间API产生的前因后果 1.1 为什么要重新定义一套日期时间API 操作不方便:java中最初的Date不能直接对指定字段进行加减操作也不支持国际化,后来新增了Calendar,但 ...

  3. Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  4. [转] Java8 日期/时间(Date Time)API指南

    [From] http://www.importnew.com/14140.html Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间 ...

  5. 详解Java8特性之新的日期时间 API

    详解Java8特性之新的日期时间 API http://blog.csdn.net/timheath/article/details/71326329 Java8中时间日期库的20个常用使用示例 ht ...

  6. Java8 日期/时间(Date Time)使用简介

    特别说明: LocalDateTime 为日期时间的计算提供了很大的方便, 在构造对象/运算/toString等方便都非常便利. 3个常用的类: java.time.LocalDateTime; ja ...

  7. JDK8 新增的日期时间API

    背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...

  8. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API

    Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...

  9. Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

    1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp ...

随机推荐

  1. presto-mysql/elasticsearch6.0.0安装部署测试,异种数据源关联查询入门实践

    本文简单记录一次实践使用过程,涉及presto-mysql,presto-elasticsearch,文中参数未做注释,请参考官方文档,希望能帮到大家 1 下载安装 presto-0.228 < ...

  2. [开源]基于goapp+xterm实现webssh-网页上的SSH终端(golang)

    简析 基于goapp+xterm实现webssh-网页上的SSH终端. 开源地址见文末. 特性 在网页上实现一个SSH终端.从而无需Xshell之类的模拟终端工具进行SSH连接. 可以对交互命令进行审 ...

  3. CSPS模拟 65

    cbx又A两题%%% T1比较水,只需要想到lcm以内的数都只能被唯一凑出就可以. T2比较shi,毕竟std复杂度都不正确的题是不能称之为完整的题的. 那么再感受一下T3满满的恶意 起点已经固定了, ...

  4. 复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符及在vim中设置tab缩进为4个字符

    1.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符 在命令模式下,使用正则表达式匹配 行首有空白字符行的模式:^[[:space:]] ...

  5. 深入理解@LoadBalanced注解的实现原理与客户端负载均衡

    前提 在阅读这篇博客之前,希望你对SpringCloud套件熟悉和理解,更希望关注下微服务开发平台 概述 在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate ...

  6. python手册学习笔记1

    笔记1 > http://www.pythondoc.com/pythontutorial3/controlflow.html 参数传递 Python中sys.argv的用法 调用解释器时,脚本 ...

  7. Jenkins+pipeline+参数构建+人工干预确定

    Jenkins+pipeline+参数构建+人工干预 实现了以下功能 1. 可以选择环境,单选:可以选择需要发布的项目,多选 2.发布过程可视化 3. 可以人工干预是否继续发布. 初始化配置需要很久, ...

  8. Download-学习资源下载

    小白求关爱:链接为本人工作中学习所碰到的,如有不对之处,请及时联系加以改正,后续仍会追加新链接地址并及时更新旧链接地址 Jdk历史版本 https://www.oracle.com/technetwo ...

  9. PHP 中四大经典排序算法

    1.冒泡排序 在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. ...

  10. 力扣(LeetCode)找不同 个人题解

    给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "abcd&quo ...