前言:
此时大家对“java根据生日计算年龄到当前日期”可能比较关切,同学们都想要学习一些“java根据生日计算年龄到当前日期”的相关文章。那么小编在网络上汇集了一些对于“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();
标签: #java根据生日计算年龄到当前日期