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

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

技术活,该赏 关注+一键三连(点赞,评论,收藏)再看,养成好习惯 

看本篇文章前,建议先对java源码的日期和时间有一定的了解,如果不了解的话,可以先看这篇文章:

万字博文教你搞懂java源码的日期和时间相关用法

关联文章:

hutool实战(带你掌握里面的各种工具)目录

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


源码分析目的

知其然,知其所以然

项目引用

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

 <dependency> <groupId>cn.hutool 
      groupId> <artifactId>hutool-core 
       artifactId> <version>5.6.5 
        version>  
         dependency> 

方法名称:DateUtil.year(java.util.Date)

方法描述

获得年的部分

源码分析一

 / * 获得年的部分 * * @param date 日期 * @return 年的部分 */ public static int year(Date date) { 
     return DateTime.of(date).year(); } 

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

  • DateTime.of(date)
  • DateTime.year()

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

/ * 转换JDK date为 DateTime * * @param date JDK Date * @return DateTime */ public static DateTime of(Date date) { 
     if (date instanceof DateTime) { 
     return (DateTime) date; } return new DateTime(date); } 

第二部分,

/ * 获得年的部分 * * @return 年的部分 */ public int year() { 
     return getField(DateField.YEAR); } / * 获得日期的某个部分
* 例如获得年的部分,则使用 getField(DatePart.YEAR) * * @param field 表示日期的哪个部分的枚举 {@link DateField} * @return 某个部分的值 */

public int getField(DateField field) { return getField(field.getValue()); } / * 获得日期的某个部分
* 例如获得年的部分,则使用 getField(Calendar.YEAR) * * @param field 表示日期的哪个部分的int值 {@link Calendar} * @return 某个部分的值 */

public int getField(int field) { return toCalendar().get(field); }

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

/ * 转换为Calendar, 默认 {@link Locale} * * @return {@link Calendar} */ public Calendar toCalendar() { 
     return toCalendar(Locale.getDefault(Locale.Category.FORMAT)); } 

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

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

方法名称:DateUtil.quarter(java.util.Date)

方法描述

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

源码分析一

/ * 获得指定日期所属季度,从1开始计数 * * @param date 日期 * @return 第几个季度 * @since 4.1.0 */ public static int quarter(Date date) { 
     return DateTime.of(date).quarter(); } 

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

  • DateTime.of(date)
  • DateTime.quarter()

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

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

/ * 获得当前日期所属季度,从1开始计数
* * @return 第几个季度 {@link Quarter} */

public int quarter() { return month() / 3 + 1; } / * 获得月份,从0开始计数 * * @return 月份 */ public int month() { return getField(DateField.MONTH); } / * 获得日期的某个部分
* 例如获得年的部分,则使用 getField(DatePart.YEAR) * * @param field 表示日期的哪个部分的枚举 {@link DateField} * @return 某个部分的值 */

public int getField(DateField field) { return getField(field.getValue()); }

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

方法名称:DateUtil.quarterEnum(java.util.Date)

方法描述

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

源码分析一

/ * 获得指定日期所属季度 * * @param date 日期 * @return 第几个季度枚举 * @since 4.1.0 */ public static Quarter quarterEnum(Date date) { 
     return DateTime.of(date).quarterEnum(); } 

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

  • DateTime.of(date)
  • DateTime.quarterEnum()

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

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

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

/ * 获得当前日期所属季度
* * @return 第几个季度 {@link Quarter} */

public Quarter quarterEnum() { return Quarter.of(quarter()); }

方法名称:DateUtil.month(java.util.Date)

方法描述

获得月份,从0开始计数

源码分析一

/ * 获得月份,从0开始计数 * * @param date 日期 * @return 月份,从0开始计数 */ public static int month(Date date) { 
     return DateTime.of(date).month(); } 

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

  • DateTime.of(date)
  • DateTime.month()

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

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

/ * 获得月份,从0开始计数 * * @return 月份 */ public int month() { 
     return getField(DateField.MONTH); } 

方法名称:DateUtil.monthEnum(java.util.Date)

方法描述

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

源码分析一

/ * 获得月份 * * @param date 日期 * @return {@link Month} */ public static Month monthEnum(Date date) { 
     return DateTime.of(date).monthEnum(); } 

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

  • DateTime.of(date)
  • DateTime.monthEnum()

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

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

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

/ * 获得月份 * * @return {@link Month} */ public Month monthEnum() { 
     return Month.of(month()); } 

方法名称:DateUtil.weekOfYear(java.util.Date)

方法描述

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

此方法返回值与一周的第一天有关,比如:

2016年1月3日为周日,如果一周的第一天为周日,那这天是第二周(返回2)

如果一周的第一天为周一,那这天是第一周(返回1)

跨年的那个星期得到的结果总是1
















源码分析一

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










public static int weekOfYear(Date date) { return DateTime.of(date).weekOfYear(); }

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

  • DateTime.of(date)
  • DateTime.weekOfYear()

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

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

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










public int weekOfYear() { return getField(DateField.WEEK_OF_YEAR); }

方法名称:DateUtil.weekOfMonth(java.util.Date)

方法描述

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

源码分析一

/ * 获得指定日期是这个日期所在月份的第几天
* * @param date 日期 * @return 天 */

public static int dayOfMonth(Date date) { return DateTime.of(date).dayOfMonth(); }

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

  • DateTime.of(date)
  • DateTime.monthEnum()

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

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

/ * 获得指定日期是这个日期所在月份的第几天,从1开始 * * @return 天,1表示第一天 */ public int dayOfMonth() { 
     return getField(DateField.DAY_OF_MONTH); } 

方法名称:DateUtil.dayOfMonth(java.util.Date)

方法描述

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

源码分析一

/ * 获得指定日期是这个日期所在月份的第几天
* * @param date 日期 * @return 天 */

public static int dayOfMonth(Date date) { return DateTime.of(date).dayOfMonth(); }

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

  • DateTime.of(date)
  • DateTime.dayOfMonth()

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

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

/ * 获得指定日期是这个日期所在月份的第几天,从1开始 * * @return 天,1表示第一天 */ public int dayOfMonth() { 
     return getField(DateField.DAY_OF_MONTH); } 

方法名称:DateUtil.dayOfYear(java.util.Date)

方法描述

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

源码分析一

/ * 获得指定日期是这个日期所在年的第几天 * * @param date 日期 * @return 天 * @since 5.3.6 */ public static int dayOfYear(Date date) { 
     return DateTime.of(date).dayOfYear(); } 

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

  • DateTime.of(date)
  • DateTime.dayOfYear()

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

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

/ * 获得指定日期是这个日期所在年份的第几天,从1开始 * * @return 天,1表示第一天 * @since 5.3.6 */ public int dayOfYear() { 
     return getField(DateField.DAY_OF_YEAR); } 

方法名称:DateUtil.dayOfWeek(java.util.Date)

方法描述

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

源码分析一

/ * 获得指定日期是星期几,1表示周日,2表示周一 * * @param date 日期 * @return 天 */ public static int dayOfWeek(Date date) { 
     return DateTime.of(date).dayOfWeek(); } 

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

  • DateTime.of(date)
  • DateTime.dayOfWeek()

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

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

/ * 获得指定日期是星期几,1表示周日,2表示周一 * * @return 星期几 */ public int dayOfWeek() { 
     return getField(DateField.DAY_OF_WEEK); } 

方法名称:DateUtil.dayOfWeekEnum(java.util.Date)

方法描述

获得指定日期是星期几

源码分析一

/ * 获得指定日期是星期几 * * @param date 日期 * @return {@link Week} */ public static Week dayOfWeekEnum(Date date) { 
     return DateTime.of(date).dayOfWeekEnum(); } 

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

  • DateTime.of(date)
  • DateTime.dayOfWeekEnum()

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

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

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

/ * 获得指定日期是星期几 * * @return {@link Week} */ public Week dayOfWeekEnum() { 
     return Week.of(dayOfWeek()); } 

方法名称:DateUtil.hour(java.util.Date, boolean)

方法描述

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

源码分析一

/ * 获得指定日期的小时数部分
* * @param date 日期 * @param is24HourClock 是否24小时制 * @return 小时数 */

public static int hour(Date date, boolean is24HourClock) { return DateTime.of(date).hour(is24HourClock); }

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

  • DateTime.of(date)
  • DateTime.hour(is24HourClock)

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

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

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

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

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

/ * 获得指定日期的小时数部分
* * @param is24HourClock 是否24小时制 * @return 小时数 */

public int hour(boolean is24HourClock) { return getField(is24HourClock ? DateField.HOUR_OF_DAY : DateField.HOUR); }

方法名称:DateUtil.minute(java.util.Date)

方法描述

获得指定日期的分钟数部分

例如:10:04:15.250 =》 4




源码分析一

/ * 获得指定日期的分钟数部分
* 例如:10:04:15.250 =》 4 * * @param date 日期 * @return 分钟数 */

public static int minute(Date date) { return DateTime.of(date).minute(); }

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

  • DateTime.of(date)
  • DateTime.minute()

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

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

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

public int minute() { return getField(DateField.MINUTE); }

方法名称:DateUtil.second(java.util.Date)

方法描述

获得指定日期的秒数部分

源码分析一

/ * 获得指定日期的秒数部分
* * @param date 日期 * @return 秒数 */

public static int second(Date date) { return DateTime.of(date).second(); }

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

  • DateTime.of(date)
  • DateTime.second()

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

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

/ * 获得指定日期的秒数部分
* * @return 秒数 */

public int second() { return getField(DateField.SECOND); }

方法名称:DateUtil.millisecond(java.util.Date)

方法描述

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

源码分析一

 / * 获得指定日期的毫秒数部分
* * @param date 日期 * @return 毫秒数 */

public static int millisecond(Date date) { return DateTime.of(date).millisecond(); }

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

  • DateTime.of(date)
  • DateTime.millisecond()

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

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

/ * 获得指定日期的毫秒数部分
* * @return 毫秒数 */

public int millisecond() { return getField(DateField.MILLISECOND); }

方法名称:DateUtil.isAM(java.util.Date)

方法描述

是否为上午

源码分析一

/ * 是否为上午 * * @param date 日期 * @return 是否为上午 */ public static boolean isAM(Date date) { 
     return DateTime.of(date).isAM(); } 

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

  • DateTime.of(date)
  • DateTime.isAM()

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

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

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

/ * 是否为上午 * * @return 是否为上午 */ public boolean isAM() { 
     return Calendar.AM == getField(DateField.AM_PM); } 

方法名称:DateUtil.isPM(java.util.Date)

方法描述

是否为下午

源码分析一

/ * 是否为下午 * * @param date 日期 * @return 是否为下午 */ public static boolean isPM(Date date) { 
     return DateTime.of(date).isPM(); } 

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

  • DateTime.of(date)
  • DateTime.isPM()

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

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

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

/ * 是否为下午 * * @return 是否为下午 */ public boolean isPM() { return Calendar.PM == getField(DateField.AM_PM); } 

方法名称:DateUtil.thisYear()

方法描述

返回今年

源码分析一

/ * @return 今年 */ public static int thisYear() { 
     return year(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.year() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisMonth()

方法描述

返回当前月份

源码分析一

/ * @return 当前月份 */ public static int thisMonth() { 
     return month(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.month() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisMonthEnum()

方法描述

返回当前月份

源码分析一

/ * @return 当前月份 {@link Month} */ public static Month thisMonthEnum() { 
     return monthEnum(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.monthEnum() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisWeekOfYear()

方法描述

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

源码分析一

/ * @return 当前日期所在年份的第几周 */ public static int thisWeekOfYear() { 
     return weekOfYear(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.weekOfYear() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisWeekOfMonth()

方法描述

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

源码分析一

 / * @return 当前日期所在月份的第几周 */ public static int thisWeekOfMonth() { 
     return weekOfMonth(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.weekOfMonth() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisDayOfMonth()

方法描述

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

源码分析一

 / * @return 当前日期是这个日期所在月份的第几天 */ public static int thisDayOfMonth() { 
     return dayOfMonth(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.dayOfMonth() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisDayOfWeek()

方法描述

返回当前日期是星期几

源码分析一

 / * @return 当前日期是星期几 */ public static int thisDayOfWeek() { 
     return dayOfWeek(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.dayOfWeek() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisDayOfWeekEnum()

方法描述

返回当前日期是星期几

源码分析一

 / * @return 当前日期是星期几 {@link Week} */ public static Week thisDayOfWeekEnum() { 
     return dayOfWeekEnum(date()); } 

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.dayOfWeekEnum() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisHour(boolean)

方法描述

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

源码分析一

 / * @param is24HourClock 是否24小时制 * @return 当前日期的小时数部分
*/

public static int thisHour(boolean is24HourClock) { return hour(date(), is24HourClock); }

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.hour() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisMinute()

方法描述

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

源码分析一

 / * @return 当前日期的分钟数部分
*/

public static int thisMinute() { return minute(date()); }

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.minute() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisSecond()

方法描述

返回当前日期的秒数部分

源码分析一

 / * @return 当前日期的秒数部分
*/

public static int thisSecond() { return second(date()); }

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.second() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.thisMillisecond()

方法描述

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

源码分析一

 / * @return 当前日期的毫秒数部分
*/

public static int thisMillisecond() { return millisecond(date()); }

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

  • DateTime.date() 获取当前时间,返回DateTime类型
  • DateTime.millisecond() 获得年的部分 源码分析

DateTime.date()

/ * 当前时间,转换为{@link DateTime}对象 * * @return 当前时间 */ public static DateTime date() { 
     return new DateTime(); } 

方法名称:DateUtil.yearAndQuarter(java.util.Date)

方法描述

源码分析一

/ * 获得指定日期年份和季节
* 格式:[20131]表示2013年第一季度 * * @param date 日期 * @return Quarter ,类似于 20132 */

public static String yearAndQuarter(Date date) { return yearAndQuarter(calendar(date)); }

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

  • calendar(date):Date对象转换为Calendar对象
  • yearAndQuarter(Calendar)

yearAndQuarter方法代码分析:

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

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

​ 然后通过StringBuilder拼接字符串

/ * 获得指定日期年份和季度
* 格式:[20131]表示2013年第一季度 * * @param cal 日期 * @return 年和季度,格式类似于20131 */

public static String yearAndQuarter(Calendar cal) { return StrUtil.builder().append(cal.get(Calendar.YEAR)).append(cal.get(Calendar.MONTH) / 3 + 1).toString(); }

方法名称:DateUtil.yearAndQuarter(java.util.Date, java.util.Date)

方法描述

源码分析一

/ * 获得指定日期区间内的年份和季节
* * @param startDate 起始日期(包含) * @param endDate 结束日期(包含) * @return 季度列表 ,元素类似于 20132 */

public static LinkedHashSet<String> yearAndQuarter(Date startDate, Date endDate) { if (startDate == null || endDate == null) { return new LinkedHashSet<>(0); } return yearAndQuarter(startDate.getTime(), endDate.getTime()); }

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

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

/ * 获得指定日期区间内的年份和季度
* * @param startDate 起始日期(包含) * @param endDate 结束日期(包含) * @return 季度列表 ,元素类似于 20132 * @since 4.1.15 */

public static LinkedHashSet<String> yearAndQuarter(long startDate, long endDate) { LinkedHashSet<String> quarters = new LinkedHashSet<>(); final Calendar cal = calendar(startDate); while (startDate <= endDate) { // 如果开始时间超出结束时间,让结束时间为开始时间,处理完后结束循环 quarters.add(yearAndQuarter(cal)); cal.add(Calendar.MONTH, 3); startDate = cal.getTimeInMillis(); } return quarters; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202248.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:33
下一篇 2026年3月20日 上午7:33


相关推荐

  • 安卓的日历_公认不卡的安卓手机

    安卓的日历_公认不卡的安卓手机一款安卓日历,包含周日历、月日历以及滑动切换视图

    2022年4月19日
    36
  • 手把手学习的DSP

    手把手学习的DSPss

    2022年4月28日
    44
  • 易语言入门教程学习「建议收藏」

    易语言入门教程学习「建议收藏」e入门教程

    2025年8月2日
    4
  • C语言逗号运算符_c语言逗号运算符优先级最低

    C语言逗号运算符_c语言逗号运算符优先级最低逗号也是运算符?是的,但是其实我更愿意说它是分隔符。在C语言中我们就经常使用逗号,看似逗号是非常平凡的分隔符,但是它关联到一个你必须知道但可能未曾思考的小知识:理论上,每条语句(分号结束),最终都会转换成一个值。例子1:#include<stdio.h>intmain(){ 3,4,5;//这是一条语句 //把上面这条语句的值赋值给变量a inta=(3,4,5); printf(“a=%d\n”,a);}输出结果:a=5因为a的值是整条语句的值,

    2025年7月15日
    7
  • 淘宝考试题目与答案

    淘宝考试题目与答案2011 淘宝开店考试试题以及答案此为网上收集加强版 对其他资源做了一些补充 1 一般违规行为节点处罚里的屏蔽天数为几天 7 天 2 下列哪一项不是 淘宝规则 中规定的节点

    2026年3月19日
    2
  • 网页文字不可以复制_html5实现复制粘贴

    网页文字不可以复制_html5实现复制粘贴大家在上网的时候是否曾经遇到过网页文字无法复制的情况呢?为什么网页文字无法复制呢?或者问如何把不能复制的网页文字复制下来呢?其实,网页文字不能复制原因大部分是网页的制作者为了防止网页内容被被人盗用而设置了复制限制,在网页中嵌入了Javascript语言,通过编程的手段屏蔽了复制功能。下面小编给大家分享下如何把被限制复制的网页文字复制下来。本方法以IE浏览器为例子,打开IE浏览器链接到需要访问的网页…

    2022年10月13日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号