Java8 日期时间API
时间:2019-11-22
本文章向大家介绍Java8 日期时间API,主要包括Java8 日期时间API使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、转换
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
原文地址:https://www.cnblogs.com/better-farther-world2099/p/11912052.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- XML--XML从入门到精通 Part 1 认识XML
- css的linear-gradient注意点
- css的linear-gradient
- 第十届山东省赛L题Median(floyd传递闭包)+ poj1975 (昨晚的课程总结错了,什么就出度出度,那应该是叫讨论一个元素与其余的关系)
- css中border-radius
- css的border-radius注意点
- js的join split startsWith endsWith
- 详解length charAt indexOf lastIndexOf includes concat slice substring substr详解
- sort实现
- border-radius
- USACO Training Section 1.1黑色星期五Friday the Thirteenth
- background-clip默认从border开始的哈
- background-origin默认从padding-box开始的哈
- USACO Training Section 1.1 坏掉的项链Broken Necklace
- 简易通讯录类实现原理