提示:本阅读大约需要10分钟

文章目录

  • 一、概述
  • 二、代码示例
    • 1.LocalDateTime 日期时间
    • 2.LocalDate 日期
    • 3.LocalTime 本地时间
    • 4.Clock 时钟
    • 5.Timezones 时区
  • 三、总结

一、概述

Java 8 包含了全新的时间日期API,这些功能都放在了java.time包下。有以下几个优点:

  1. 为保证安全,所有class都不可变且不可继承(final),除abstract和interface以外。每一次方法调用都会产生新的日期时间实例,不影响之前的值。
  2. 为时区、日期、时间、日期时间、时间戳甚至年、月、日都定义了不同的类,功能分离明显。
  3. API调用具有链式风格,无论是静态方法还是类方法都有很明确的行为,方法名能表达其中意思。
  4. 功能全面,几乎所有日期时间类的API都提供加减(日期或时间)、格式化、解析等方法,且能互相转换,方便协作。

二、代码示例

1.LocalDateTime 日期时间

代码如下(示例):


//日期格式化
LocalDateTime sylvester = LocalDateTime.of(2020, Month.DECEMBER,31, 23, 59, 59);System.out.println(sylvester);DayOfWeek dayOfWeek1 = sylvester.getDayOfWeek();System.out.println(dayOfWeek1);Month month = sylvester.getMonth();System.out.println(month);long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY);System.out.println(minuteOfDay);//转成Date对象Instant instant1 = sylvester.atZone(ZoneId.systemDefault()).toInstant();System.out.println(Date.from(instant1));//格式化时间 yMd HmsDateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss");String format = dateTimeFormatter.format(LocalDateTime.now());System.out.println(format);

2.LocalDate 日期

代码如下(示例):

LocalDate today = LocalDate.now();System.out.println(today);//向后推一天LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);System.out.println(tomorrow);//向后推两天LocalDate yesterday = today.minusDays(2);System.out.println(yesterday);//计算星期LocalDate independenceDay = LocalDate.of(2020, Month.DECEMBER, 28);DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();System.out.println(dayOfWeek);DateTimeFormatter germanFormatter1 =DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.GERMAN);LocalDate xmas = LocalDate.parse("12.12.2020", germanFormatter1);System.out.println(xmas);

3.LocalTime 本地时间

LocalTime是由多个工厂方法组成,其目的是为了简化对时间对象实例的创建和操 作,包括对时间字符串进行解析的操作。本地时间类表示一个没有指定时区的时间,例如,10 p.m.或者17:30:15,下面的 例子会用上面的例子定义的时区创建两个本地时间对象。然后我们会比较两个时间,并计算它们之间的小时和分钟的不同。
代码如下(示例):

    // 创建上海Asia/Shanghai和伦敦Europe/London的时区 测试LocalTimeLocalTime now = LocalTime.now(ZoneId.of("Europe/London"));LocalTime now1 = LocalTime.now(ZoneId.of("Asia/Shanghai"));System.out.println(now);System.out.println(now1);System.out.println(now1.isBefore(now));//计算两个时区的时间差long hoursBetween = ChronoUnit.HOURS.between(now, now1);System.out.println(hoursBetween);LocalTime of = LocalTime.of(12, 12, 12);System.out.println(of);DateTimeFormatter germanFormatter =DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(Locale.GERMAN);LocalTime leetTime = LocalTime.parse("13:37", germanFormatter);System.out.println(leetTime);

4.Clock 时钟

Clock提供了对当前时间和日期的访问功能。Clock是对当前时区敏感的,并可用于 替代System.currentTimeMillis()方法来获取当前的毫秒时间。当前时间线上的时刻 可以用Instance类来表示。Instance也能够用于创建原先的java.util.Date对象。
代码如下(示例):

        //中国默认时区 Asia/ShanghaiClock clock = Clock.systemDefaultZone();System.out.println(clock);//现在距离1970年1月1日的毫秒时间long millis = clock.millis();System.out.println(millis);Instant instant = clock.instant();//年月日Date from = Date.from(instant);System.out.println(from);

5.Timezones 时区

时区类可以用一个ZoneId来表示。时区类的对象可以通过静态工厂方法方便地获 取。时区类还定义了一个偏移量,用来在当前时刻或某时间与目标时区时间之间进 行转换。
代码如下(示例):

//默认时区System.out.println(ZoneId.systemDefault());//支持的所有时区System.out.println(ZoneId.getAvailableZoneIds());//当前的标准偏移量System.out.println(ZoneId.of("Asia/Shanghai").getRules());

三、总结

java8强大的日期时间库,省去了以前很多不必要的操作,如果正在开发的项目对时间很敏感的话,那么他会帮你节约大量的时间。

Java8新特性之日期和时间相关推荐

  1. 重学Java8新特性(四) : 日期时间API、LocalDateTime、DateTimeFormatter、开发中时间工具类(常用)

    文章目录 一.JDK8中日期时间API的介绍 1.1.LocalDate.LocalTime.LocalDateTime的使用 2.2.Instant类的使用 2.3.DateTimeFormatte ...

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

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

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

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

  4. 【Java8新特性】关于Java8中的日期时间API,你需要掌握这些!!

    写在前面 Java8之前的日期和时间API,存在一些问题,比如:线程安全的问题,跨年的问题等等.这些问题都在Hava8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大.立志 ...

  5. Java8 新特性:Lambda 表达式、方法和构造器引用、Stream API、新时间与日期API、注解

    Java8新特性:Lambda 表达式.方法和构造器引用.Stream API.新时间与日期API.注解 1.Java8新特性 1.1.主要的新特性: 1.2.编程风格 2.Lambda 表达式 2. ...

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

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

  7. Java8新特性之新时间API

    Java8新特性之新时间API 一.新时间API 1.1 之前时间API存在问题:线程安全问题.设计混乱 1.2 本地化日期时间API:LoaclDate.LocalTime.LocalDateTim ...

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

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

  9. java8新特性简述

    Java8发布时间是2014年3月19日,距离今日已经很久了,那么Java8新特性你了解吗? java8是Java的一次重大升级,巨大的里程碑式的改进!! Java语言新特性: 1.与传统结合 -- ...

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

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

最新文章

  1. 《Linux内核原理与分析》第二周作业
  2. 在非UI线程中处理Bitmap
  3. 【高效JDBC编程工具JadePool快速入门】
  4. jpa 去重_spring boot jpa 表关联查询分组 group by 去重
  5. Java GridBagLayout 简单使用
  6. Kubernetes三周年,这仅仅是伟大征途的开始
  7. python是一种面相什么语言_Python面相对象编程的知识总结
  8. MegaCli查看RIAD相关信息
  9. django-celery beat报错 error pid
  10. python随机生成中文句子_python – 如何使用NLTK从诱导语法中生成句子?
  11. 华为/华三IS-IS单区域配置
  12. Excel批量生成条形码
  13. 实例003输出名言 实例说明 是否能够成为真正的编程高手,主要是在于是否有毅力坚持学习和练习。本实例要求输出名言“贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒。”主要是想让读者激励自己,坚持学习
  14. 查看网卡ip linux,教你如何查看本机ip地址?
  15. PC端滚动加载更多的实现方法
  16. 分布式学习之一:事务
  17. 3D机房前端学习笔记
  18. SpringBoot整合knife和swagger3
  19. java crm 进销存 springmvc SSM 项目 系统
  20. 快手如何直播引流?快手直播推广方法分享

热门文章

  1. 【华为OD机试真题 JAVA】数字涂色
  2. MySQL-数据库驱动程序的下载
  3. python读取xls文件_用python脚本 从xls文件中读取数据
  4. VMware下的Ubuntu安装jink进行调试
  5. 重新安装电脑系统,升级win10的系统经验总结
  6. 最新区块链科普图书《区块链进化史》上市
  7. 关于未来几年的发展,闰土有话要说
  8. 苹果企业开发账号申请三步走
  9. 开放式社区?太小儿科了,智慧城市才是重点
  10. 【OpenGL】笔记二十一、Alpha测试、混合测试