首页 > 其他分享 >JDK8-日期和时间API

JDK8-日期和时间API

时间:2022-10-24 23:45:21浏览次数:49  
标签:时刻 Instant System 日期 API JDK8 println now out

日期和时间是非常复杂的一个东西,因为语言文化和时区等等原因,时间又是一个非常简单的东西,因为他是人类生活的共工基础,所以长时间来形成了非常成熟的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 操作的时间单位更多,并且还可以乘除。

标签:时刻,Instant,System,日期,API,JDK8,println,now,out
From: https://www.cnblogs.com/hcgk/p/16823483.html

相关文章

  • 实验7:基于REST API的SDN北向应用实践
    (一)基本要求1.编写Python程序,调用OpenDaylight的北向接口实现以下功能调用OpenDaylight的北向接口获取拓扑信息importrequestsasrqfromrequests.authimportHTTP......
  • Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
    通常使用Vue2开发的项目,普遍会存在以下问题:代码的可读性随着组件变大而变差每一种代码复用的方式,都存在缺点TypeScript支持有限以上通过使用CompositionApi都能迎刃......
  • 2.4 RedisAPI之list
    1.简介字符串键值结构(keyvalue)特点有序可重复左右两边都可插入和删除2.命令从列表右端插入值rpushkeyvalue1value2......valueN时间复杂度为O(1~n)从列表左端插入值l......
  • 2.6 RedisAPI之zset
    1.简介字符串键值结构(keyscorevalue)特点有序不重复支持集合间操作2.命令向集合内添加元素,element不可以重复但score是可以重复的zaddkeyscoreelement时间复杂度为O(l......
  • 2.5 RedisAPI之set
    1.简介字符串键值结构(keyvalue)特点无序不重复支持集合间操作2.命令向集合内添加元素element,如果element已经存在则添加失败saddkeyelement时间复杂度为O(1)删除集合内......
  • 2.3 RedisAPI之hash
    1.简介字符串键值结构(keyfieldvalue)2.命令设置key对应的field的valuehsetkeyfieldvalue时间复杂度为O(1)获取key对应的field的valuehgetkeyfieldvalue时间复杂度......
  • 2.2 RedisAPI之string
    1.简介字符串键值结构(keyvalue)value的值小于512m,一般建议一个key-value的大小为100k使用场景缓存计数器分布式锁2.命令设置key-value不管key是否存在都设置setkeyvalue......
  • 2.1 RedisAPI之简介
    1.通用命令遍历所有keykeys*keys命令一般不在生产环境使用,主要原因是生产环境下通常有大量的key,列出所有key没有实际的意义并且会消耗很多内存资源。删除指定keydelkey计......
  • 获得指定日期的前几天日期
    /***获得指定日期的前几天日期**@paramspecifiedDay指定日期*@parampattern需要返回的日期格式,如yyyy-MM-dd*@parambefore前几天*......
  • 实验7:基于REST API的SDN北向应用实践
    (一)基本要求编写Python程序,调用OpenDaylight的北向接口实现以下功能。(1)利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight。(2)下发指令删除s1上的流表数据#!/us......