[ 常量 ]
public static final long MILLIS_PER_SECOND = 1000;
public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND;
public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE;
public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR;
public static final int SEMI_MONTH = 1001;
private static final int[][] fields = {
{Calendar.MILLISECOND},
{Calendar.SECOND},
{Calendar.MINUTE},
{Calendar.HOUR_OF_DAY, Calendar.HOUR},
{Calendar.DATE, Calendar.DAY_OF_MONTH, Calendar.AM_PM
/* Calendar.DAY_OF_YEAR, Calendar.DAY_OF_WEEK, Calendar.DAY_OF_WEEK_IN_MONTH */
},
{Calendar.MONTH, SEMI_MONTH},
{Calendar.YEAR},
{Calendar.ERA}};
public static final int RANGE_WEEK_SUNDAY = 1;
public static final int RANGE_WEEK_MONDAY = 2;
public static final int RANGE_WEEK_RELATIVE = 3;
public static final int RANGE_WEEK_CENTER = 4;
public static final int RANGE_MONTH_SUNDAY = 5;
public static final int RANGE_MONTH_MONDAY = 6;
private enum ModifyType {
TRUNCATE,
ROUND,
CEILING
}
[ 常用方法 ]
参数
// 当前时间
Date date = new Date();
// 时间输出
Consumer<Date> consumer = object -> {
String format = DateFormatUtils.format(object, "yyyy-MM-dd HH:mm:ss");
System.out.println(format);
};
当前日期指定字段添加多少时间,可以为负数
// 当前日期加1年
DateUtils.addYears(date, 1);
// 当前日期加1个月
DateUtils.addMonths(date, 1);
// 当前日期加1天
DateUtils.addDays(date, 1);
// 当前日期加1个星期
DateUtils.addWeeks(date, 1);
// 当前日期加1小时
DateUtils.addHours(date, 1);
// 当前日期加1分钟
DateUtils.addMinutes(date, 1);
// 当前日期加1秒钟
DateUtils.addSeconds(date, 1);
// 当前日期加1毫秒
DateUtils.addMilliseconds(date, 1);
DateUtils.ceiling(final Date date, final int field) => 截取日期时间的部分值,截取的末尾部分向上取整
Date ceilYear = DateUtils.ceiling(date, Calendar.YEAR);
Date ceilMonth = DateUtils.ceiling(date, Calendar.MONTH);
Date ceilDay = DateUtils.ceiling(date, Calendar.DAY_OF_MONTH);
Date ceilHour = DateUtils.ceiling(date, Calendar.HOUR);
Date ceilMinute = DateUtils.ceiling(date, Calendar.MINUTE);
Date ceilSecode = DateUtils.ceiling(date, Calendar.SECOND);
consumer.accept(date);//2018-11-23 11:32:12
consumer.accept(ceilYear);//2019-01-01 00:00:00,截取到年,年向上取整(即+1)
consumer.accept(ceilMonth);//2018-12-01 00:00:00,截取到月,月向上取整(即+1);如果是12月的话,月进1变成01,年进1
consumer.accept(ceilDay);//2018-11-24 00:00:00,截取到日,日向上取整(即+1);如果是30(或28/31)的话,日进1变成01,月进1
consumer.accept(ceilHour);//2018-11-23 12:00:00,截取到时,时向上取整(即+1);如果是23点的话,时进1变成00,日进1
consumer.accept(ceilMinute);//2018-11-23 11:33:00,截取到分,分向上取整(即+1);如果是59分的话,分进1变成00,时进1
consumer.accept(ceilSecode);//2018-11-23 11:32:13,截取到分,分向上取整(即+1)
DateUtils.ceiling(final Calendar date, final int field) => 截取日历的部分值,截取的末尾部分向上取整
Calendar calendar = Calendar.getInstance();
DateUtils.ceiling(calendar, Calendar.YEAR);
// ...
DateUtils.ceiling(final Object date, final int field) => 截取[日期时间 | 日历]的部分值,截取的末尾部分向上取整
DateUtils.ceiling(calendar, Calendar.YEAR);
// ...
// date所指时间是当前月分(年份)的第几天
System.out.println(DateUtils.getFragmentInDays(date, Calendar.YEAR));
DateUtils.getFragmentInDays(calendar, Calendar.YEAR);
// date所指时间是当前月分(年份)的第几小时
System.out.println(DateUtils.getFragmentInHours(date, Calendar.YEAR));
System.out.println(DateUtils.getFragmentInHours(calendar, Calendar.YEAR));
// date所指时间是当前月分(年份)的第几分钟
System.out.println(DateUtils.getFragmentInMinutes(date, Calendar.YEAR));
System.out.println(DateUtils.getFragmentInMinutes(calendar, Calendar.YEAR));
// // date所指时间是当前月分(年份)的第几秒
System.out.println(DateUtils.getFragmentInSeconds(date, Calendar.YEAR));
System.out.println(DateUtils.getFragmentInSeconds(calendar, Calendar.YEAR));
// // date所指时间是当前月分(年份)的第几毫秒
System.out.println(DateUtils.getFragmentInMilliseconds(date, Calendar.YEAR));
System.out.println(DateUtils.getFragmentInMilliseconds(calendar, Calendar.YEAR));
设置日期指定字段值
consumer.accept(DateUtils.setYears(date, 2021));
consumer.accept(DateUtils.setMonths(date, 1));
consumer.accept(DateUtils.setDays(date, 1));
consumer.accept(DateUtils.setHours(date, 1));
consumer.accept(DateUtils.setMinutes(date, 1));
consumer.accept(DateUtils.setSeconds(date, 1));
consumer.accept(DateUtils.setMilliseconds(date, 1));
DateUtils.isSameDay => 比较年月日是否相等
DateUtils.isSameDay(date, date);
DateUtils.isSameInstant => 比较时间毫秒数是否相等
DateUtils.isSameInstant(date, date);
DateUtils.isSameDay => 比较日历年月日是否相等
DateUtils.isSameDay(calendar, calendar);
DateUtils.isSameInstant => 比较日历毫秒数是否相等
DateUtils.isSameInstant(calendar, calendar);
DateUtils.isSameLocalTime => 判断是否是同一个本地时间
DateUtils.isSameLocalTime(calendar, calendar);
DateUtils.toCalendar => Date转为Calendar
Calendar calendar1 = DateUtils.toCalendar(date);
DateUtils.toCalendar => Date转为指定时区的Calendar
Calendar calendar2 = DateUtils.toCalendar(date, TimeZone.getTimeZone("Asia/Shanghai"));
DateUtils.round => 截取日期时间的部分值,截取的末尾部分四舍五入,截取部分外的其他部分使用默认初始值(年、月、日、时、分、秒 的默认初始值分别为:0001、01、01、00、00、00)
//Date DateUtils.round(Date date, int field)
Date dateRound = DateUtils.round(date,Calendar.YEAR);
DateUtils.round => 截取日历的部分值,截取的末尾部分四舍五入...
//Date DateUtils.round(Calendar calendar, int field)
Calendar calendarRound = DateUtils.round(calendar, Calendar.YEAR);
DateUtils.round => 截取[日期时间 | 日历]的部分值,截取的末尾部分四舍五入...
//Date DateUtils.round(Object object, int field)
Calendar objectRound = DateUtils.round(calendar, Calendar.YEAR);
DateUtils.truncate(Date date, int field) => 截取日期时间的部分值,截取部分外的其他部分使用默认初始值(年、月、日、时、分、秒 的默认初始值分别为:0001、01、01、00、00、00)
Date truncate = DateUtils.truncate(date, Calendar.YEAR);//截取年,而月、日使用初始值01,时、分、秒使用初始值00
// 其它重载方法
// DateUtils.truncate(Calendar calendar, int field)
// DateUtils.truncate(Object object, int field)
DateUtils.truncatedCompareTo => 两个日期截取相同的部分进行比较。如果 date1更大(更晚)则返回 1,如果 date2 更大(更晚)则返回 -1 ,如果相等,则返回 0。
DateUtils.truncatedCompareTo(date, date, Calendar.YEAR);
DateUtils.truncatedCompareTo(calendar, calendar, Calendar.YEAR);
DateUtils.truncatedEquals => 两个日期截取相同的部分,比较值是否相等。
DateUtils.truncatedEquals(date, date, Calendar.YEAR);
DateUtils.truncatedEquals(calendar, calendar, Calendar.YEAR);
DateUtils.iterator(Date focus, int rangeStyle) => 遍历包含日期 focus 所在的 rangeStyle 范围的连续星期的每一天。
DateUtils.parseDate => 将 String 类型的日期数据转换成 Date 类型的日期数据
// 重载方法Date DateUtils.parseDate(final String str, final Locale locale, final String... parsePatterns)
//该方法中,Locale locale 参数指定语言环境,如果为空,则默认为当前系统的语言环境
try {
DateUtils.parseDate("2019-06-15 22:48:52","yyyy-MM-dd HH:mm:ss");
// 第二个参数可以有多个,至少一个满足,否则报错
DateUtils.parseDate("2019-06-15 22:48:52", ArrayUtils.toArray("yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd"));
DateUtils.parseDate("2019-06-15 22:48:52", Locale.CHINESE,"yyyy-MM-dd HH:mm:ss");
} catch (ParseException e) {
e.printStackTrace();
}
DateUtils.parseDateStrictly() => 跟parseDate作用相同只是他更严格,例子如下
try {
// 比如,下面的代码也可以解析出Date日期,只不过得到的结果变成了“2019-10-30 00:00:00”,并不是正确的结果。
Date date2 = DateUtils.parseDate("2019-06-152", "yyyy-MM-dd");
consumer.accept(date2);
// 而如果像下面这样写的话,会直接报错java.text.ParseException: Unable to parse the date: 2019-06-152。
Date date3 = DateUtils.parseDateStrictly("2019-06-152", "yyyy-MM-dd");
consumer.accept(date3);
} catch (ParseException e) {
e.printStackTrace();
}