资讯专栏INFORMATION COLUMN

java 8 时间类之彻底看懂 java.time.temporal.ChronoField

lentrue / 1585人阅读

摘要:欢迎关注我的项目,这篇博文只是完善时间工具类的测试过程。

欢迎关注我的项目:https://github.com/duanluan/ZUtil,这篇博文只是完善时间工具类的测试过程。

代码:

@DisplayName("时间工具类测试")public class DateUtilsTest {  @DisplayName("探寻 ChronoField")  @Test  void testChronoField() {    String indent = "/t/t/t/t/t/t/t/t/t/t/t/t/t";    LocalDateTime now = LocalDateTime.now();    // 时代:公元前,相当于当前时间的负数    System.out.println(now.with(ChronoField.ERA, 0) + indent.replaceFirst("/t", "") + "时代:公元前");    // 时代:公元,即当前时间    System.out.println(now.with(ChronoField.ERA, 1) + indent + "时代:公元");    // 公元前所属年:以当前时间为基础,年修改为公元前 2 年,结果 -0001-10-01T02:30:32.723 加上当前时间的月份往后 10-01T02:30:32.723 为 2 年    System.out.println(now.with(ChronoField.ERA, 0).with(ChronoField.YEAR_OF_ERA, 2) + indent.replaceFirst("/t", "") + "公元前所属年");    // 公元后所属年:以当前年月为基础,年修改为 2 年    System.out.println(now.with(ChronoField.ERA, 1).with(ChronoField.YEAR_OF_ERA, 2) + indent + "公元后所属年");    // 年    System.out.println(now.with(ChronoField.YEAR, 2020) + indent + "年");    // 预期月,从 0 年开始计算月(从 0 开始),2021 年 10 月的值为 2021 * 12 + 10 - 1    System.out.println(now.with(ChronoField.PROLEPTIC_MONTH, 0) + indent + "预期月");    // 年的月    System.out.println(now.with(ChronoField.MONTH_OF_YEAR, 9) + indent + "年的月");    // 年的对齐周:年的第一天为第一周的第一天    System.out.println(now.with(ChronoField.ALIGNED_WEEK_OF_YEAR, 2) + indent + "年的对齐周");    // 月的对齐周:月的第一天为此月第一周的第一天    System.out.println(now.with(ChronoField.ALIGNED_WEEK_OF_MONTH, 2) + indent + "月的对齐周");    // 年的对齐周的天    System.out.println(now.with(ChronoField.ALIGNED_WEEK_OF_YEAR, 2).with(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR, 5) + indent + "年的对齐周的天");    // 月的对齐周的天    System.out.println(now.with(ChronoField.ALIGNED_WEEK_OF_MONTH, 2).with(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, 5) + indent + "月的对齐周的天");    // 年的天    System.out.println(now.with(ChronoField.DAY_OF_YEAR, 1) + indent + "年的天");    // 月的天    System.out.println(now.with(ChronoField.DAY_OF_MONTH, 1) + indent + "月的天");    // 周的天    System.out.println(now.with(ChronoField.DAY_OF_WEEK, 1) + indent + "周的天");    // 以 1970-01-01 为 0 开始的天(忽略偏移量和时区)    System.out.println(now.with(ChronoField.EPOCH_DAY, 1) + indent + "以 1970-01-01 为 0 开始的天(忽略偏移量和时区)");    // 上午(0-12)    System.out.println(now.with(ChronoField.AMPM_OF_DAY, 0) + indent + "上午(0-12)");    // 下午(13-23)    System.out.println(now.with(ChronoField.AMPM_OF_DAY, 1) + indent + "下午(13-23)");    // 上午或下午的小时,以当前 AMPM 为准,从 0 开始    System.out.println(now.with(ChronoField.HOUR_OF_AMPM, 0) + indent + "上午或下午的小时");    // 上午的小时    System.out.println(now.with(ChronoField.AMPM_OF_DAY, 0).with(ChronoField.HOUR_OF_AMPM, 0) + indent + "上午的小时");    // 下午的小时    System.out.println(now.with(ChronoField.AMPM_OF_DAY, 1).with(ChronoField.HOUR_OF_AMPM, 0) + indent + "下午的小时");    // 12 小时制,以当前 AMPM 为准,从 1 开始    System.out.println(now.with(ChronoField.CLOCK_HOUR_OF_AMPM, 1) + indent + "12 小时制");    // 上午的 12 小时制小时    System.out.println(now.with(ChronoField.AMPM_OF_DAY, 0).with(ChronoField.CLOCK_HOUR_OF_AMPM, 1) + indent + "上午的 12 小时制小时");    // 下午的 12 小时制小时    System.out.println(now.with(ChronoField.AMPM_OF_DAY, 1).with(ChronoField.CLOCK_HOUR_OF_AMPM, 1) + indent + "下午的 12 小时制小时");    // 天的小时    System.out.println(now.with(ChronoField.HOUR_OF_DAY, 0) + indent + "天的小时");    // 天的分钟    System.out.println(now.with(ChronoField.MINUTE_OF_DAY, 1) + indent + "天的分钟");    // 小时的分钟    System.out.println(now.with(ChronoField.MINUTE_OF_HOUR, 1) + indent + "小时的分钟");    // 天的秒    System.out.println(now.with(ChronoField.SECOND_OF_DAY, 1) + indent + "天的秒");    // 分钟的秒    System.out.println(now.with(ChronoField.SECOND_OF_MINUTE, 1) + indent + "分钟的秒");    // 以 1970-01-01T00:00Z (ISO) 为 0 开始的秒,必须和时区结合使用(+时区小时)    System.out.println(now.atZone(ZoneId.systemDefault()).with(ChronoField.INSTANT_SECONDS, 1) + "/t/t以 1970-01-01T00:00Z (ISO) 为 0 开始的秒,必须和时区结合使用(+时区小时)");    // 天的毫秒    System.out.println(now.with(ChronoField.MILLI_OF_DAY, 1) + indent + "天的毫秒");    // 秒的毫秒    System.out.println(now.with(ChronoField.MILLI_OF_SECOND, 1) + indent + "秒的毫秒");    // 天的微秒    System.out.println(now.with(ChronoField.MICRO_OF_DAY, 1) + indent.replaceFirst("/t/t", "") + "天的微秒");    // 秒的微秒    System.out.println(now.with(ChronoField.MICRO_OF_SECOND, 1) + indent.replaceFirst("/t/t", "") + "秒的微秒");    // 天的纳秒    System.out.println(now.with(ChronoField.NANO_OF_DAY, 1) + indent.replaceFirst("/t/t/t", "") + "天的纳秒");    // 秒的纳秒    System.out.println(now.with(ChronoField.NANO_OF_SECOND, 1) + indent.replaceFirst("/t/t/t", "") + "秒的纳秒");  }}

运行结果,和 “2020-11-21 16:10:43.532” 这个时间对比着看区别:

-2020-11-21T16:10:43.532							时代:公元前2021-11-21T16:10:43.532								时代:公元-0001-11-21T16:10:43.532							公元前所属年0002-11-21T16:10:43.532								公元后所属年2020-11-21T16:10:43.532								年0000-01-21T16:10:43.532								预期月2021-09-21T16:10:43.532								年的月2021-01-10T16:10:43.532								年的对齐周2021-11-14T16:10:43.532								月的对齐周2021-01-12T16:10:43.532								年的对齐周的天2021-11-12T16:10:43.532								月的对齐周的天2021-01-01T16:10:43.532								年的天2021-11-01T16:10:43.532								月的天2021-11-15T16:10:43.532								周的天1970-01-02T16:10:43.532								以 1970-01-01 为 0 开始的天(忽略偏移量和时区)2021-11-21T04:10:43.532								上午(0-12)2021-11-21T16:10:43.532								下午(13-23)2021-11-21T12:10:43.532								上午或下午的小时2021-11-21T00:10:43.532								上午的小时2021-11-21T12:10:43.532								下午的小时2021-11-21T13:10:43.532								12 小时制2021-11-21T01:10:43.532								上午的 12 小时制小时2021-11-21T13:10:43.532								下午的 12 小时制小时2021-11-21T00:10:43.532								天的小时2021-11-21T00:01:43.532								天的分钟2021-11-21T16:01:43.532								小时的分钟2021-11-21T00:00:01.532								天的秒2021-11-21T16:10:01.532								分钟的秒1970-01-01T08:00:01.532+08:00[Asia/Shanghai]		以 1970-01-01T00:00Z (ISO) 为 0 开始的秒,必须和时区结合使用(+时区小时)2021-11-21T00:00:00.001								天的毫秒2021-11-21T16:10:43.001								秒的毫秒2021-11-21T00:00:00.000001							天的微秒2021-11-21T16:10:43.000001							秒的微秒2021-11-21T00:00:00.000000001						天的纳秒2021-11-21T16:10:43.000000001						秒的纳秒

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124036.html

相关文章

  • jdk(java)8 日期格式化工具-使用枚举处理

    摘要:日期格式化工具使用枚举处理在项目开发中,日期格式化是高频的工具类。后来想了想,觉得使用枚举定义日期格式化处理,感觉不用手写格式化字符串,并且可以根据需要集中增加格式化字符串暂不清楚,为什么这种方式比较少。 ...

    AlanKeene 评论0 收藏0
  • Lambda表达式与Stream流 (终)

    摘要:陈杨一表达式与流二初始化测试数据三各种方法一方法方法二方法 package com.java.design.java8; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.Spring...

    lidashuang 评论0 收藏0
  • 测试开发系类之接口自动化测试

    摘要:接口定义代码角度的接口定义中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为功能。 接口定义 代码角度的接口Interface 定义:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这...

    alexnevsky 评论0 收藏0
  • android文章总结- 收藏集 - 掘金

    摘要:个代码性能优化总结后端掘金前言代码优化,一个很重要的课题。站点个非常有用的程序片段后端掘金下面是个非常有用的程序片段,希望能对你有用。 35 个 Java 代码性能优化总结 - 后端 - 掘金前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没...

    golden_hamster 评论0 收藏0
  • Java进阶之路

    摘要:探索专为而设计的将探讨进行了何种改进,以及这些改进背后的原因。关于最友好的文章进阶前言之前就写过一篇关于最友好的文章反响很不错,由于那篇文章的定位就是简单友好,因此尽可能的摒弃复杂的概念,只抓住关键的东西来讲,以保证大家都能看懂。 周月切换日历 一个可以进行周月切换的日历,左右滑动的切换月份,上下滑动可以进行周,月不同的视图切换,可以进行事件的标记,以及节假日的显示,功能丰富 Andr...

    sushi 评论0 收藏0

发表评论

0条评论

lentrue

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<