一、转换

1、与字符串

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

2、与Date

// Date 转 LocalDateTime 与 LocalDate
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
//也可以使用LocalDateTime的FactoryInput()方法使用系统的默认时区
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
------------------------------------------------------------------------------------------------
// LocalDateTime 转换成 Date
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
Date date = Date.from(zdt.toInstant());
// LocalDate 转换成 Date
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
Date date = Date.from(zdt.toInstant());

3、LocalDateTime 转 LocalDate

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

二、比较

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

三、计算日期时间差

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

1.Period
2.Duration
3.ChronoUnit

1、Period类

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

示例:

import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
public class Test {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("Today : " + today);
LocalDate birthDate = LocalDate.of(1993, Month.OCTOBER, 19);
System.out.println("BirthDate : " + birthDate);
Period p = Period.between(birthDate, today);
System.out.printf("年龄 : %d 年 %d 月 %d 日", p.getYears(), p.getMonths(), p.getDays());
}
}

结果:

Today : 2017-06-16
BirthDate : 1993-10-19
年龄 : 23 年 7 月 28 日

2、Duration类

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

示例:

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

3、ChronoUnit类

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

示例:

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

输出结果:

PT2H2M8S
2小时2分8秒
-----------------------------------------
2小时2分8秒 Process finished with exit code 0

四、日期格式化

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

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

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

获取指定的⽇期时间对象

LocalDateTime ldt = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
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. MyBatis与Spring的整合实例详解

    从之前的代码中可以看出直接使用 MyBatis 框架的 SqlSession 访问数据库并不简便.MyBatis 框架的重点是 SQL 映射文件,为方便后续学习,本节讲解 MyBatis 与 Spri ...

  2. 使用pyquery

    简单举例 from pyquery import PyQuery as pq html = ''' <div> <ul> <li class="item-O&q ...

  3. C语言1博客作业04

    问题 答案 这个作业属于那个课程 C语言程序设计1 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9770 我在这 ...

  4. python写购物车小程序

    #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Author: Skyell Wang # @Time : 2018/5/22 15:50 # 基础要 ...

  5. [考试反思]1002csp-s模拟测试56:凌乱

    放假回来状态回升??(玩够了-但是稍困) T1打的不完全对,但是过掉了.很快的想到了二分吧喇叭啦.. 然后T2也挺快想出来了但是挂细节没发现,考试快结束的时候才发现出锅了. 改了过来是正解,但是出题人 ...

  6. [考试反思]0825NOIP模拟测试30:没落

    AB卷,15人. Lrefrain rank#1 179 skyh rank#2 122 116 108 54 42虽说还是不怎么样,但是有好转的迹象. 开卷审题,T1是个(假)期望,感觉也许还可做. ...

  7. 轰炸行动(bomb):tarjan,拓扑排序

    考场上看错题,没什么好说的. 然而它就是一个大板子. 发的题解勉强还能看.但是我还想再讲讲. 题目的表述是,如果从A能直接或间接到B,那么就不能同时轰炸A和B. 那么我们从图里随便拽出一条有向路径,从 ...

  8. [专题总结]AC自动机

    其实前面的模板也不是1A,我在题库里提前做过,也不必在意罚时,刚开始我在做别的专题 裸模板我就不说了,各个博客讲解的很明白 void insert(string s){ ,len=s.size(); ...

  9. javaScript中this到底指向谁

    1.前言 在JavaScript中,this的指向一直是大多数初学者的易错点,总是搞不清楚this到底指向谁,而在求职面试中,this的指向问题往往又是高频考点.本篇博文就来总结一下在JavaScri ...

  10. hadoop2.9.0之前的版本yarn RM fairScheduler调度性能优化

    对一般小公司来说 可能yarn调度能力足够了 但是对于大规模集群1000 or 2000+的话  yarn的调度性能捉襟见肘 恰好网上看到一篇很好的文章https://tech.meituan.com ...