新的时间处理包java.time
2021/8/4 22:09:40
本文主要是介绍新的时间处理包java.time,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
木叶飞舞之处,火亦生生不息
- 一、包的层级结构
- 二、常用方法示例
- 一、日期
- 二、时间戳
- 三、获取时间范围
- 四、时间校正器
- 五、时间格式化
java8中定义了新的时间包java.time较于1.8之前的 Date,Calendar ,TimeZone,SimpleDateFormat有了更好的实现方式。
比如新的时间格式不管什么操作都是产生新实例,是线程安全的。
一、包的层级结构
- java.time:标准的日期和时间的类
- java.time.chrono:特殊的时间,比如日本的平成,台湾的民国
- java.time.format:时间格式化
- java.time.temporal:时间校正器
- java.time.zone:时区
二、常用方法示例
一、日期
一共有三个常用类LocalDate,LocalTime,LocalDateTime。
其中的方法都是见名知意,可以说是非常好用,下面仅做演示。
//表示日期的 LocalDate localDate = LocalDate.now(); System.out.println("当前日期:" + localDate); //表示时间的 LocalTime localTime = LocalTime.now(); System.out.println("当前时间:" + localTime); //表示日期加时间 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("当前日期时间:" + localDateTime); //获取时间的每个值 System.out.println("年:" + localDateTime.getYear()); System.out.println("月:" + localDateTime.getMonthValue()); System.out.println("日:" + localDateTime.getDayOfMonth()); System.out.println("时:" + localDateTime.getHour()); System.out.println("分:" + localDateTime.getMinute()); System.out.println("秒:" + localDateTime.getSecond()); //指定时间的创建方式 LocalDateTime localDateTime1 = LocalDateTime.of(2021, 12, 31, 23, 23, 23); System.out.println("自定义日期时间:" + localDateTime1); //增加两天 LocalDateTime localDateTime2 = localDateTime1.plusDays(2); System.out.println("自定义日期时间+两天:" + localDateTime2);
其结果为 当前日期:2021-08-04 当前时间:17:05:15.793 当前日期时间:2021-08-04T17:05:15.793 年:2021 月:8 日:4 时:17 分:5 秒:15 自定义日期时间:2021-12-31T23:23:23 自定义日期时间+两天:2022-01-02T23:23:23
二、时间戳
时间戳就是从1970年1月1日0时0分0秒至今计算的毫秒数,使用Instant类。
//默认获取UTC时间 比东八区早8个小时 Instant instant = Instant.now(); System.out.println("默认时间:" + instant); Instant now = Instant.now(Clock.systemUTC()); System.out.println("当前时区时间:" + instant); System.out.println("当前时区毫秒:" + now.toEpochMilli()); System.out.println("当前时区秒:" + now.getEpochSecond());
其结果为 默认时间:2021-08-04T09:33:58.596Z 当前时区时间:2021-08-04T09:33:58.596Z 当前时区毫秒:1628069638641 当前时区秒:1628069638
三、获取时间范围
时间范围用Duration或者Period获取,两者的不同是Peirod只接收LocalDate类型的参数而Duration接收的参数要实现Temporal接口。所以Period只能精确到天,Duration能精确到毫秒甚至纳秒。
//时间之间间隔的 LocalDateTime localDateTime1 = LocalDateTime.now(); Thread.sleep(1000); LocalDateTime localDateTime2 = LocalDateTime.now(); Duration duration = Duration.between(localDateTime1, localDateTime2); System.out.println("获取毫秒数" + duration.toMillis()); //日期之间间隔的 LocalDate localDate1 = LocalDate.of(2021, 7, 8); LocalDate localDate2 = LocalDate.of(2021, 7, 12); Period period = Period.between(localDate1, localDate2); System.out.println("获取天数" + period.getDays());
其结果为 获取毫秒数1009 获取天数4
四、时间校正器
在temporal包下,有一个类TemporalAdjusters提供了大量的静态方法去修改时间。
LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("当前时间:" + localDateTime); //指定天数到下周五 LocalDateTime localDateTime1 = localDateTime.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)); System.out.println("下周五:" + localDateTime1); //指定哪一天 LocalDateTime localDateTime2 = localDateTime.withDayOfMonth(10); System.out.println("指定时间:" + localDateTime2); LocalDateTime localDateTime3 = localDateTime.withDayOfYear(300); System.out.println("指定时间:" + localDateTime3); //自定义 下一个工作日 LocalDateTime localDateTime4 = localDateTime.with((l) -> { LocalDateTime s2 = (LocalDateTime) l; DayOfWeek dayOfWeek = s2.getDayOfWeek(); if (dayOfWeek.equals(DayOfWeek.FRIDAY)) { return s2.plusDays(3); } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) { return s2.plusDays(2); } else { return s2.plusDays(1); } }); System.out.println("下一个工作日:" + localDateTime4);
其结果为 当前时间:2021-08-04T19:25:11.288 下周五:2021-08-06T19:25:11.288 指定时间:2021-08-10T19:25:11.288 指定时间:2021-10-27T19:25:11.288 下一个工作日:2021-08-05T19:25:11.288
五、时间格式化
格式化使用DateTimeFormatter进行,既可以从DateTimeFormatter调用方法,也可以将该类的方法当做参数传入。
LocalDateTime now = LocalDateTime.now(); String str = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssSSS")); String str1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(now); System.out.println(str); System.out.println(str1); //字符串转时间格式化毫秒值好像必须有. 暂不知道为什么 LocalDateTime localDateTime = LocalDateTime.parse("20210808121212.111", DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS")); LocalDateTime localDateTime1 = LocalDateTime.from(DateTimeFormatter.ofPattern("yyyyMMddHHmmss").parse("20210808121212")); System.out.println(localDateTime); System.out.println(localDateTime1);
其结果为 2021-08-04 19:50:27102 2021-08-04 19:50:27 2021-08-08T12:12:12.111 2021-08-08T12:12:12
这篇关于新的时间处理包java.time的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器