DateTime取代Date类,该类的API修复了不合理的常量表示,严格按照ISO 8601规定的日期和时间格式进行输出,ISO 8601通过T进行日期和时间的分隔。
比如:

  • Month的范围用1~12表示1月到12月;
  • Week的范围用1~7表示周一到周日。

1、获取当前时间

LocalDate d = LocalDate.now(); // 当前日期
LocalTime t = LocalTime.now(); // 当前时间
LocalDateTime dt = LocalDateTime.now(); // 当前日期和时间

2、指定的日期和时间创建

// 指定各独立的日期和时间:
LocalDate d2 = LocalDate.of(2022, 4, 20); // 2022-04-20, 注意04=4月
LocalTime t2 = LocalTime.of(15, 16, 17); // 15:16:17
LocalDateTime dt2 = LocalDateTime.of(2022, 4, 20, 15, 16, 17);//2022-04-20T15:16:17
LocalDateTime dt3 = LocalDateTime.of(d2, t2);//2022-04-20T15:16:17//传入时间字符串
LocalDate d = LocalDate.parse("2022-04-20");
LocalTime t = LocalTime.parse("15:16:17");
LocalDateTime dt3 = LocalDateTime.parse(" 2022-04-20 15:16:17");

3、加减日期

加时间:plusXXX(value),减时间:minusXXX(value)

LocalDateTime dt = LocalDateTime.now();
// 加1天减1小时:
LocalDateTime dt2 = dt.plusDays(1).minusHours(1);
// 减1月:
LocalDateTime dt3 = dt2.minusMonths(1);
System.out.println(dt3);
//对时间进行操作,出现跨年、跨月操作时,时间会自动进行转换,比如:2019-10-31减去1个月得到的结果是2019-09-30,因为9月没有31日。

4、时间调整

对日期和时间进行调整则使用withXxx()方法,例如:withHour(15)会把10:11:12变为15:11:12

  • 调整年:withYear()
  • 调整月:withMonth()
  • 调整日:withDayOfMonth()
  • 调整时:withHour()
  • 调整分:withMinute()
  • 调整秒:withSecond()
LocalDate dt = LocalDate.of(2020, 3, 31); //2020-03-31
System.out.println(dt);
// 月份变为4:
LocalDate dt3 = dt.withMonth(4);
System.out.println(dt3); //2020-04-30
//对时间进行操作,出现跨年、跨月操作时,时间会自动进行转换,比如:2020-03-31调整为4个月得到的结果是2020-04-30,因为4月没有31日。

5、时间调整进阶配合 TemporalAdjusters

通过with()可以进行更加复杂的运算

 dayOfWeekInMonth //它的值为同一个月中每一周的第几天firstDayOfMonth //它的值为当月的第一天firstDayOfNextMonth //它的值为下月的第一天firstDayOfNextYear //它的值为明年的第一天firstDayOfYear //它的值为当年的第一天firstInMonth //它的值为同一个月中,第一个符合星期几要求的值lastDayOfMonth //它的值为当月的最后一天lastDayOfYear //它的值为今年的最后一天//对指定星期的操作 - DayOfWeeklastInMonth //它的值为同一个月中,符合星期几要求的值next/previous//将日期向前一周或者向后一周,调整到指定星期几nextOrSame/previousOrSame //将日期向前或者向后,调整到指定星期几(如当前日期不存在于调整周的区间内则跨周),比如调整到周四,如果当天周二,则为本周周四;如果当天周五,则为下周四//实列
LocalDate dt = LocalDate.now();
//明年的第一天
System.out.println(dt.with(TemporalAdjusters.firstDayOfNextYear()));
//两周后的周五
System.out.println(dt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)).plusWeeks(1));

6、时区操作

ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区时间
ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York"));//指定时区获取当前时间//atZone时区转换,通过ZoneId指定要转换到的时区
//LocalDateTime转ZonedDateTime
LocalDateTime ldt = LocalDateTime.now();
//2020-04-15T15:16:17+08:00[Asia/Shanghai] 获取吗默认时区
ZonedDateTime zbj = ldt.atZone(ZoneId.systemDefault());
//2020-04-15T03:16:17-04:00[America/New_York],与美国差12小时
ZonedDateTime zny = ldt.atZone(ZoneId.of("America/New_York"));//时区转换
//转为指定时区时间
ZonedDateTime zny = ldt.withZoneSameInstant(ZoneId.of("America/New_York"));
//转为当前时区时间
LocalDateTime date = zny.toLocalDateTime();

7、时间戳操作

System.currentTimeMillis();//毫秒级时间戳
Instant now = Instant.now();
System.out.println(now.getEpochSecond()); // 秒
System.out.println(now.toEpochMilli()); // 毫秒
Instant.ofEpochSecond(value);//设置秒时间戳
Instant.ofEpochMilli(value);//设置毫秒时间戳//当前时间戳转换为指定时区
Instant ins = Instant.now();
ZonedDateTime zdt = ins.atZone(ZoneId.of("America/New_York"))//时间戳转LocalDateTime
LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(systemTime), ZoneId.systemDefault());

8、日期格式化

LocalDateTime dt = LocalDateTime .now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dateTimeFormatter.format(dt));

9、时间差

LocalDate startDate=startDate;
LocalDate endDate=endDate;
long y = ChronoUnit.YEARS.between(startDate, endDate); //获取两个日期间隔年
long m = ChronoUnit.MONTHS.between(startDate, endDate);//获取两个日期间隔月
long d = ChronoUnit.DAYS.between(startDate, endDate); //获取两个日期间隔天

Java8新特性DateTime使用相关推荐

  1. java8新特性_Java8新特性之Date API|乐字节

    大家好,我是乐字节的小乐,上篇文章讲述了<Java8新特性之Optional>,接下来,小乐将接着讲述Java8新特性之Date API 2019日历 Java8之Date API Jav ...

  2. java8新特性(6)— 日期与时间

    java8新特性(6)- 日期与时间 全新的日期与时间处理 package com.common.jdk8;import java.time.*;//Java 8通过发布新的Date-Time API ...

  3. Java8新特性总结 -6.Date/Time API

    所有示例代码打包下载 : 点击打开链接 Java8新特性 :  接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...

  4. Java8新特性之空指针异常的克星Optional类

    Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...

  5. 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势

    [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小家java ...

  6. 【Java8新特性 串行/并行流-Optional容器类-时间格式化线程安全等】

    Java8新特性二 一.并行流与顺序流 1.概念 2.Fork/Join框架 3. Fork/Join框架代码示例: 二.Optional类 1. 什么是Optional对象 2. Optional类 ...

  7. java8 新特性精心整理(全)——新 Date/Time API

    https://blog.csdn.net/sanri1993/article/details/101176712 前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自 ...

  8. Java8新特性学习笔记

    Java8新特性学习笔记 文章目录 Java8新特性学习笔记 一.接口和日期处理 1.接口增强 1.1.JDK8以前 VS JDK8 1)接口定义: 1.2.默认方法(default) 1)默认方法格 ...

  9. Java8 新特性实战

    Java8 新特性实战 本文来自cowbi的投稿~ Oracle 于 2014 发布了 Java8(jdk1.8),诸多原因使它成为目前市场上使用最多的 jdk 版本.虽然发布距今已将近 7 年,但很 ...

  10. 【JAVA基础】java基础之-java8新特性

    写在前面的话 脑子是个好东西,可惜的是一直没有搞懂脑子的内存删除机制是什么,所以啊,入行多年,零零散散的文章看了无数,却总是学习了很多也忘了很多. 痛定思痛的我决定从今天开始系统的梳理下知识架构,记录 ...

最新文章

  1. 网易实时数仓实践与展望
  2. 通过Attached Property给控件绑定Command(二)
  3. [转]docker 部署 mysql + phpmyadmin 3种方法
  4. tomcat的配置支持多个网站
  5. how is Fiori launchpad host name and port number determine
  6. Hadoop入门(四)HDFS编程
  7. 【报告分享】抖音品牌主页运营官方指导手册.pdf(附下载链接)
  8. android studio后端写在哪里_c++写的在终端上的2048游戏
  9. 【渝粤题库】广东开放大学 建筑工程概预算 形成性考核
  10. nvidia显卡cuda的性能_苦等10年!512 CUDA满血GTX 480终于出现:性能提升6%、功耗暴增43%...
  11. html java 安卓_用Html进行Android开发-Fun言
  12. Opencv LBP特征
  13. aspnetpager使用介绍
  14. win7上搭建ftp站点
  15. 针对ewebeditor编辑器漏洞一次实战经验
  16. linkerd mysql_纠错帖:Zuul Spring Cloud Gateway Linkerd性能对比
  17. HTML怎么跟随页面缩放,如何让网页跟着 浏览器全比例缩小(示例代码)
  18. 解除Word的编辑保护【简单版】
  19. python安装第三方库遇到 ERROR: Command errored out with exit status 1:
  20. JAX-WS RI组件开发基于JAX-WS规范的WebService服务入门程序

热门文章

  1. 一个程序员的时间管理“辛”路历程
  2. 基于FPGA的深度学习CNN加速器设计
  3. 什么是驻点和拐点_极值点、驻点、拐点的区别
  4. 3GPP TS 24.301 Release 8 中文版
  5. php网上商城系统下载,php网上商城系统 v3.0 rc6
  6. 恶意程序新趋势-钻粪坑+数签
  7. 手把手教你linux系统安装和完美配置
  8. asp.net 按钮点击调用FileUpload
  9. 计算机电源管理器的用途,联想电源管理软件调整电源模式有什么用?联想电源管理软件电源模式调整和用处...
  10. Redis常用命令总结,为什么阿里的程序员成长如此之快