3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容相关的知识,希望对你有一定的参考价值。

参考技术A

知其然,知其所以然

此博文的依据:hutool-5.6.5版本源码

获得年的部分

源码的**DateTime.of(date).year()**可拆解成两部分

第一部分,看代码很好理解,就是类型的转化

第二部分,

从代码跟下来,可以发现会走到 toCalendar().get(field)

**toCalendar()**会得到Calendar,这会就好理解可以获取年了。

不止可以获取年,还可以获取年,月,日,时,分,秒。详细介绍可以看这里:万字博文教你搞懂java源码的日期和时间相关用法

获得指定日期所属季度,从1开始计数

源码的**DateTime.of(date).quarter()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,month()获取DateTime对应的月份,然后再做了一个简单计算。

getField方法上面有介绍了,这里就不水字了。

获得指定日期所属季度,返回的是季度枚举对象Quarter

源码的**DateTime.of(date).quarterEnum()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,quarter()上面有源码分析,结论是获取 获得当前日期所属季度,从1开始计数

**Quarter.of(int)**就是把对应的数值转为对应的枚举Quarter

获得月份,从0开始计数

源码的**DateTime.of(date).month()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得月份,返回月份枚举对象Month

源码的**DateTime.of(date).monthEnum()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,month()是获得月份,从0开始计数

**Month.of(int)**就是把对应的数值转为对应的枚举Month

获得指定日期是所在年份的第几周
此方法返回值与一周的第一天有关,比如:
2016年1月3日为周日,如果一周的第一天为周日,那这天是第二周(返回2)
如果一周的第一天为周一,那这天是第一周(返回1)
跨年的那个星期得到的结果总是1

源码的**DateTime.of(date).weekOfYear()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是所在月份的第几周

源码的**DateTime.of(date).year()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是这个日期所在月份的第几天

源码的**DateTime.of(date).dayOfMonth()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是这个日期所在年的第几天

源码的**DateTime.of(date).dayOfYear()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是星期几,1表示周日,2表示周一

源码的**DateTime.of(date).dayOfWeek()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是星期几

源码的**DateTime.of(date).dayOfWeekEnum()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,dayOfWeek()是获得指定日期是星期几,1表示周日,2表示周一

**Week.of(int)**就是把对应的数值转为对应的枚举Week

获得指定日期的小时数部分

源码的**DateTime.of(date).hour(is24HourClock)**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

is24HourClock ? DateField.HOUR_OF_DAY : DateField.HOUR :is24HourClock 是否24小时制

DateField.HOUR_OF_DAY :小时,用于24小时制

DateField.HOUR :小时,用于12小时制

获得指定日期的分钟数部分
例如:10:04:15.250 =》 4

源码的**DateTime.of(date).minute()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期的秒数部分

源码的**DateTime.of(date).second()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期的毫秒数部分

源码的**DateTime.of(date).millisecond()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

是否为上午

源码的**DateTime.of(date).isAM()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

做了一个判断 Calendar.AM == getField(DateField.AM_PM)

是否为下午

源码的**DateTime.of(date).isPM()**可拆解成两部分

DateTime.of(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

做了一个判断 Calendar.PM== getField(DateField.AM_PM)

返回今年

源码的**year(date())**可拆解成两部分

DateTime.date()

返回当前月份

源码的**month(date())**可拆解成两部分

DateTime.date()

返回当前月份

源码的**monthEnum(date())**可拆解成两部分

DateTime.date()

返回当前日期所在年份的第几周

源码的**weekOfYear(date())**可拆解成两部分

DateTime.date()

返回当前日期所在月份的第几周

源码的**weekOfMonth(date())**可拆解成两部分

DateTime.date()

返回当前日期是这个日期所在月份的第几天

源码的**dayOfMonth(date())**可拆解成两部分

DateTime.date()

返回当前日期是星期几

源码的**dayOfWeek(date())**可拆解成两部分

DateTime.date()

返回当前日期是星期几

源码的**dayOfWeekEnum(date())**可拆解成两部分

DateTime.date()

返回当前日期的小时数部分

源码的**hour(date(), is24HourClock)**可拆解成两部分

DateTime.date()

返回当前日期的分钟数部分

源码的**minute(date())**可拆解成两部分

DateTime.date()

返回当前日期的秒数部分

源码的**second(date())**可拆解成两部分

DateTime.date()

返回当前日期的毫秒数部分

源码的**millisecond(date())**可拆解成两部分

DateTime.date()

获得指定日期年份和季节
格式:[20131]表示2013年第一季度

源码的**yearAndQuarter(calendar(date))**可拆解成两部分

yearAndQuarter方法代码分析:

获取年份 cal.get(Calendar.YEAR)

获取季度 cal.get(Calendar.MONTH) / 3 + 1

然后通过StringBuilder拼接字符串

获得指定日期区间内的年份和季节

如上面代码所示,有个判空处理

然后,写了一个while循环,把符合条件的年份和季度存到LinkedHashSet里,存完一个年份和季度的字符串后,会给开始时间增加3个月,如果开始时间超出结束时间,让结束时间为开始时间,处理完后结束循环

以上是关于3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容的主要内容,如果未能解决你的问题,请参考以下文章

3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容

3hutool实战:DateUtil-获取日期的各种内容

3hutool实战:DateUtil-获取日期的各种内容

1hutool源码分析:DateUtil(时间工具类)-当前时间和当前时间戳

1hutool源码分析:DateUtil(时间工具类)-当前时间和当前时间戳

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)