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(时间工具类)-获取日期的各种内容
1hutool源码分析:DateUtil(时间工具类)-当前时间和当前时间戳