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
四、日期格式化
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的更多相关文章
- Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...
- 都9012了,Java8中的日期时间API你还没有掌握?
一,Java8日期时间API产生的前因后果 1.1 为什么要重新定义一套日期时间API 操作不方便:java中最初的Date不能直接对指定字段进行加减操作也不支持国际化,后来新增了Calendar,但 ...
- Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类
因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...
- [转] Java8 日期/时间(Date Time)API指南
[From] http://www.importnew.com/14140.html Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间 ...
- 详解Java8特性之新的日期时间 API
详解Java8特性之新的日期时间 API http://blog.csdn.net/timheath/article/details/71326329 Java8中时间日期库的20个常用使用示例 ht ...
- Java8 日期/时间(Date Time)使用简介
特别说明: LocalDateTime 为日期时间的计算提供了很大的方便, 在构造对象/运算/toString等方便都非常便利. 3个常用的类: java.time.LocalDateTime; ja ...
- JDK8 新增的日期时间API
背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...
- Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API
Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...
- Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点
1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp ...
随机推荐
- presto-mysql/elasticsearch6.0.0安装部署测试,异种数据源关联查询入门实践
本文简单记录一次实践使用过程,涉及presto-mysql,presto-elasticsearch,文中参数未做注释,请参考官方文档,希望能帮到大家 1 下载安装 presto-0.228 < ...
- [开源]基于goapp+xterm实现webssh-网页上的SSH终端(golang)
简析 基于goapp+xterm实现webssh-网页上的SSH终端. 开源地址见文末. 特性 在网页上实现一个SSH终端.从而无需Xshell之类的模拟终端工具进行SSH连接. 可以对交互命令进行审 ...
- CSPS模拟 65
cbx又A两题%%% T1比较水,只需要想到lcm以内的数都只能被唯一凑出就可以. T2比较shi,毕竟std复杂度都不正确的题是不能称之为完整的题的. 那么再感受一下T3满满的恶意 起点已经固定了, ...
- 复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符及在vim中设置tab缩进为4个字符
1.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符 在命令模式下,使用正则表达式匹配 行首有空白字符行的模式:^[[:space:]] ...
- 深入理解@LoadBalanced注解的实现原理与客户端负载均衡
前提 在阅读这篇博客之前,希望你对SpringCloud套件熟悉和理解,更希望关注下微服务开发平台 概述 在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate ...
- python手册学习笔记1
笔记1 > http://www.pythondoc.com/pythontutorial3/controlflow.html 参数传递 Python中sys.argv的用法 调用解释器时,脚本 ...
- Jenkins+pipeline+参数构建+人工干预确定
Jenkins+pipeline+参数构建+人工干预 实现了以下功能 1. 可以选择环境,单选:可以选择需要发布的项目,多选 2.发布过程可视化 3. 可以人工干预是否继续发布. 初始化配置需要很久, ...
- Download-学习资源下载
小白求关爱:链接为本人工作中学习所碰到的,如有不对之处,请及时联系加以改正,后续仍会追加新链接地址并及时更新旧链接地址 Jdk历史版本 https://www.oracle.com/technetwo ...
- PHP 中四大经典排序算法
1.冒泡排序 在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. ...
- 力扣(LeetCode)找不同 个人题解
给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "abcd&quo ...