网站首页 > java教程 正文
概述
属于重大变更,包含在java.time包中。
本文主要包含以下
- 现有date ,time api 的问题
- LocalDate,LocalTime和LocalDateTime
- ZonedDateTime
- · Instant
- ·Instant与LocalDateTime,LocalDate转换
现有date ,time api 的问题
- 线程安全
Date和Calendar类不是线程安全的,这使开发人员不得不处理难以调试的并发问题和编写其他代码来处理线程安全的麻烦。相反,Java 8中引入的新的日期和时间 API是不可变的,并且是线程安全的。
- API的设计和易于理解
Date和Calendar API的设计不完善,缺乏执行日常操作的方法。新的日期/时间 API以ISO为中心,并遵循一致的日期,时间,持续时间和期间域模型。有许多支持最常用操作的实用程序方法。
- 时区,时间
开发人员必须编写其他逻辑才能使用旧的API处理时区逻辑,而使用新的API,可以使用 Local和 ZonedDate / Time API完成时区的处理
LocalDate
是一个不可变的日期时间对象,表示日期,通常被视为年月日。 也可以访问其他日期字段,例如日期,星期几和星期。 例如,值"2007年10月2日"可存储在LocalDate 。
该类不存储或表示时间或时区。 相反,它是日期的描述,用于生日。 它不能代表时间线上的即时信息,而没有附加信息,如偏移或时区。
1. //of 指定时间 2. LocalDate localDate= LocalDate.of(2019,10,14); 3. //当前日期LocalDate 4. localDate = LocalDate.now(); 5. // 在当前日期上推后一天 6. LocalDate tomorrow = LocalDate.now().plusDays(1); 7. //周几: 8. DayOfWeek sunday = LocalDate.parse("2016-06-12").getDayOfWeek(); 9. //每月第几天: 10. int twelve = LocalDate.parse("2016-06-12").getDayOfMonth(); 11. //日期前后: 12. boolean notBefore = LocalDate.parse("2016-06-12").isBefore(LocalDate.parse("2016-06-11"));
LocalTime
是一个不可变的日期时间对象,代表一个时间,通常被看作是小时 - 秒。 时间表示为纳秒精度。 例如,值"13:45.30.123456789"可以存储在
1. //当前时间 2. LocalTime now = LocalTime.now(); 3. //6点30分 4. LocalTime sixThirty = LocalTime.parse("06:30");LocalTime sixThirty = LocalTime.of(6, 30); 5. //6点30分推后1小时: 6. LocalTime sevenThirty = LocalTime.parse("06:30").plus(1, ChronoUnit.HOURS); 7. //获取小时: 8. int six = LocalTime.parse("06:30").getHour(); 9. //时间先后对比: 10. boolean isbefore = LocalTime.parse("06:30").isBefore(LocalTime.parse("07:30")); 11. //一天中最大,中午,最小时间: 12. LocalTime maxTime = LocalTime.MAX;LocalTime minTime = LocalTime.MIN;LocalTime midnight = LocalTime.MIDNIGHT;
LocalDateTime
一个不可变的日期时间对象,代表日期时间,通常被视为年 - 月 - 日 - 时 - 分 - 秒。 也可以访问其他日期和时间字段,例如日期,星期几和星期。 时间表示为纳秒精度。 例如,值"2007年10月2日在13:45.30.123456789"可以存储在LocalDateTime 。
1. LocalDateTime.now(); 2. LocalDateTime.of(2015, Month.FEBRUARY, 20, 06, 30); 3. LocalDateTime localDateTime = LocalDateTime.parse("2015-02-20T06:30:00"); 4. localDateTime.plusDays(1);
ZonedDateTime
是具有时区的日期时间的不可变表示。 此类存储所有日期和时间字段,精度为纳秒,时区为区域偏移量,用于处理模糊的本地日期时间。 例如,值"2007年10月2日在13:45.30.123456789 +欧洲/巴黎时区的+02:00"可以存储在ZonedDateTime 。
1. //巴黎 2. ZoneId zoneId1 = ZoneId.of("Europe/Paris"); 3. //可以获得所有区域ID的集合 4. Set<String> allZoneIds = ZoneId.getAvailableZoneIds(); 5. //特定区域日期时间 6. localDateTime = LocalDateTime.parse("2015-02-20T06:30:00"); 7. ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId1); 8. // result 2015-02-20T06:30+01:00[Europe/Paris] 9. //解析区域时间 10. zonedDateTime = ZonedDateTime.parse("2015-05-03T10:15:30+01:00[Europe/Paris]");
OffsetDateTime
有偏移量的日期时间的不可变表示。 该类存储所有日期和时间字段,精度为纳秒,以及与UTC /格林威治的偏移量。 例如,值"2007年10月2日13:45.30.123456789 +02:00"可存储在OffsetDateTime
1. LocalDateTime localDateTime1 = LocalDateTime.of(2015, Month.FEBRUARY, 20, 06, 30); 2. ZoneOffset offset = ZoneOffset.of("+02:00"); 3. OffsetDateTime offSetByTwo = OffsetDateTime.of(localDateTime, offset); 4. //result 2015-02-20T06:30+02:00
·Instant
在时间线上的瞬间点。
该类在时间线上建立单个瞬时点。 这可能用于在应用程序中记录事件时间戳。
实际上,这一瞬间存在一些限制。 可测量的时间线限制在long中可以持有的long 。 这大于当前估计的宇宙年龄。 该瞬间存储为纳秒分辨率。
瞬间的范围需要存储大于long 。 为了实现这一点,类存储long表示划时代秒和int表示纳秒的秒,这将始终为0和999,999,999之间。 时标是从标准的Java时代1970-01-01T00:00:00Z ,其中时代之后的时刻具有正值,较早的时刻具有负值。 对于时代第二和纳秒部分,时间线上的值越大越小
1. //当前时间戳转换 2. Instant i = Instant.ofEpochMilli(System.currentTimeMillis());
Instant与LocalDateTime,LocalDate转换
瞬时时间转换都需要先转换为ZonedDateTime,然后在进行转换。
· //instant to localDate · Instant.now().atZone(zoneId).toLocalDate(); · //instant to toLocalDateTime · Instant.now().atZone(zoneId).toLocalDateTime(); · //instant to toLocalTime · Instant.now().atZone(zoneId).toLocalTime(); · //localDate to instant · LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant();
· Duration (持续时间)
基于时间的时间量,如'34.5秒'。
该类以秒和纳秒为单位建立数量或时间量。 它可以使用其他基于持续时间的单位进行访问,例如分钟和小时。 此外, 单位可以使用,并被视为完全等于24小时,因此忽略了夏令时效应
Duration的内部实现与Instant类似,也是包含两部分:seconds表示秒,nanos表示纳秒。两者的区别是Instant用于表示一个时间戳(或者说是一个时间点),而Duration表示一个时间段,所以Duration类中不包含now()静态方法。可以通过Duration.between()方法创建Duration
1. // 2019-01-05 10:07:00 2. LocalDateTime from = LocalDateTime.of(2019, Month.JANUARY, 5, 10, 7, 0); 3. // 2019-02-05 10:07:00 4. LocalDateTime to = LocalDateTime.of(2019, Month.FEBRUARY, 5, 10, 7, 0); 5. // 表示从 2019-01-05 10:07:00 到 2019-02-05 10:07:00 这段时间 6. Duration duration = Duration.between(from, to); 7. // 这段时间的总天数 8. long days = duration.toDays(); 9. // 这段时间的小时数 10. long hours = duration.toHours(); 11. // 这段时间的分钟数 12. long minutes = duration.toMinutes(); 13. // 1天 14. Duration duration1 = Duration.ofDays(1); 15. // 1天的毫秒数 16. duration1.toMillis();
· Period(间隔)
· //两个时间 间隔 · Period period = Period.between( · LocalDate.of(2019, 1, 1), · LocalDate.of(2019, 3, 1)); · //间隔 天数 · period.getDays(); · //间隔 月数 · period.getMonths(); · //间隔年 · period.getYears();
猜你喜欢
- 2024-11-11 Java 8新特性:新的时间和日期API(java的日期类型)
- 2024-11-11 整理一波Mysql中易忘基础知识点和也许你也会踩的一些坑
- 2024-11-11 Idea安装通义灵码教程(idea安装使用教程)
- 2024-11-11 「开发者成长」不要在网上乱拷贝代码了
- 2024-11-11 如何正常掌握MySql时间处理函数的学习与实践,看了这篇就够了
- 2024-11-11 一段网上找的代码突然爆了,项目出现大Bug
- 2024-11-11 python之time模块详细梳理(python中time模块详解)
- 2024-11-11 网上找的一段代码突然爆了,项目出现大Bug
- 2024-11-11 LeetCode基础算法题第166篇:1185. 给定一个日期求星期几
- 2024-11-11 现代与传统日期时间处理工具概览(时间 日期)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)