JDK8-日期和时间API
日期和时间是非常复杂的一个东西,因为语言文化和时区等等原因,时间又是一个非常简单的东西,因为他是人类生活的共工基础,所以长时间来形成了非常成熟的API,直接调用感觉不到复杂。
对于一些老程序员来说,已经习惯了老版本的java.util包下Date对象或者Calendar,但是JDK8却重构的时间对象,在java.time包下。
总体来看时间常用场景
- 时间线
- 本地日期
- 本地时间
- 日期调整期
- 时区时间-做日志云和自监控平台常用
- 格式化和解析
- 与遗留老时间日期对象的相互转换(向下兼容)
java.time包下有大量的类,我们应该熟悉,N多类,把时间做了细分,对于时间的表示和运行更加明确
时间线
地球自转--秒--原子钟
Java的Date和TimeAPI规范要求Java使用的时间尺度为:
- 每天86400秒
- 每天正午与官方时间精确度匹配
- 在其他时间点上,以精准定义的方式与官网时间接近匹配
Instant - 表示时间线上的某个点。
新纪元-时间原点-1970年1月1日的物业--英国伦敦格林威治皇家天文台的本初子午线
Instant.MIN~Instant.MAX : 回溯10亿年~公园1 000 000 000 年的12月31日
public static void main(String[] args) throws InterruptedException { // 格式化 本质要理解一定要有时区的概念,否则没法格式化 DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ); // DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL) // .withLocale(Locale.CHINA) // .withZone(ZoneId.systemDefault()); System.out.println(formatter.format(Instant.now().atZone(ZoneId.systemDefault()))); // 最大时刻 System.out.println("最大时刻:\t" + Instant.MIN); // 最小时刻 System.out.println("最小时刻:\t" + Instant.MAX); // 原点时刻 System.out.println("原点时刻:\t" + Instant.EPOCH); // 当前时刻 System.out.println("当前时刻:\t" + Instant.now()); System.out.println("当前时区时刻:\t" + Instant.now().atZone(ZoneId.systemDefault())); // 纪元秒 System.out.println("毫秒转换:\t" + Instant.ofEpochMilli(System.currentTimeMillis()).atZone(ZoneId.systemDefault())); // utc字符串转换 System.out.println("utc字符串:\t" + Instant.parse("2022-10-24T22:31:31.00Z")); // 获取秒或者纳秒 Instant now = Instant.now(); System.out.println("获取当前时间的纪元秒: \t" + now.getEpochSecond()); System.out.println("获取当前时间的纪元纳秒: \t" + now.getNano()); // 偏移 System.out.println("1分钟后: \t" + now.plusSeconds(60).toString()); // 获取当前时刻 Instant start = Instant.now(); // 做其他事情 Thread.sleep(1000); // 获取当前时刻 Instant end = Instant.now(); Duration timeElapsed = Duration.between(start, end); long seconds = timeElapsed.getSeconds(); System.out.printf("程序运行时间差%d秒", seconds); }
输出结果:
2022年10月24日 星期一 下午11时00分10秒 CST 最大时刻: -1000000000-01-01T00:00:00Z 最小时刻: +1000000000-12-31T23:59:59.999999999Z 原点时刻: 1970-01-01T00:00:00Z 当前时刻: 2022-10-24T15:00:10.264Z 当前时区时刻: 2022-10-24T23:00:10.264+08:00[Asia/Shanghai] 毫秒转换: 2022-10-24T23:00:10.264+08:00[Asia/Shanghai] utc字符串: 2022-10-24T22:31:31Z 获取当前时间的纪元秒: 1666623610 获取当前时间的纪元纳秒: 279000000 1分钟后: 2022-10-24T15:01:10.279Z 程序运行时间差1秒 Process finished with exit code 0
- Instant 时刻由秒和纳秒组成final类
- Duration 时间段,两个时间间的时间量final类
- 对于时间可以进行算数运算,instant主要围绕秒级,毫秒级,纳秒级进行偏移,Duration 操作的时间单位更多,并且还可以乘除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码