日期时间
1、DateUtil
获取当前时间
import cn.hutool.core.date.DateUtil;import java.util.Calendar;
import java.util.Date;
//当前时间字符串,格式:yyyy-MM-dd HH:mm:ssDate date = DateUtil.date();Date date2 = DateUtil.date(Calendar.getInstance());Date date3 = DateUtil.date(System.currentTimeMillis());String now = DateUtil.now();//当前日期字符串,格式:yyyy-MM-ddString today= DateUtil.today();
字符串转日期
String dateStr = "1956/09/12";/*传入一个字符串 返回 Date,默认格式为yyyy-MM-dd HH:mm:ss,且无法更改使用 DateUtil.parse(dateStr,"yyyy-MM-dd");类似这种方式也不行,会报错*/Date date = DateUtil.parse(dateStr);
格式化日期
/*传入一个Date 返回 字符串,可以自定义日期格式*/String format = DateUtil.format(date, "yyyy-MM-dd");/*传入一个Date 返回 字符串,常用格式的格式化:yyyy-MM-dd*/String formatDate = DateUtil.formatDate(date);/*传入一个Date 返回 字符串,常用格式的格式化:yyyy-MM-dd HH:mm:ss*/String formatDateTime = DateUtil.formatDateTime(date);/*传入一个Date 返回 字符串,常用格式的格式化:HH:mm:ss*/String formatTime = DateUtil.formatTime(date);
获取年月日
/*传入Date,获取年份*/int year = DateUtil.year(date);/*传入Date,获取月份,从 0 开始计算的,需要 +1*/int month = DateUtil.month(date);/*传入Date,获取日*/int day = DateUtil.dayOfMonth(date);/*传入Date,获取月份枚举,月份对应的英文*/Month monthEnum = DateUtil.monthEnum(date);
获取开始、结束
/*传入Date,获取某天的开始,默认格式:1956-09-12 00:00:00*/Date beginOfDay = DateUtil.beginOfDay(date);/*传入Date,获取某天的结束,默认格式:1956-09-12 23:59:59*/Date endOfDay = DateUtil.endOfDay(date);/*传入Date,获取某月的开始,默认格式:1956-09-01 00:00:00*/Date beginOfMonth = DateUtil.beginOfMonth(date);/*传入Date,获取某月的结束,默认格式:1956-09-30 23:59:59*/Date endOfMonth = DateUtil.endOfMonth(date);/*传入Date,获取某年的开始,默认格式:1956-01-01 00:00:00*/DateTime beginOfYear = DateUtil.beginOfYear(date);/*传入Date,获取某月的结束,默认格式:1956-12-31 23:59:59*/DateTime endOfYear = DateUtil.endOfYear(date);
日期时间偏移
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
偏移天、月、时
/*偏移几天,传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 没有 HH:mm:ss 会默认 00:00:00正数为:往后偏移负数为:往前偏移为当月第一天或最后一天,自动偏移到上月或下月,偏移后到了上年或下年也一样*/Date offset = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);/*默认偏移“日”,传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 没有 HH:mm:ss 会默认 00:00:00正数为:往后偏移负数为:往前偏移为当月第一天或最后一天,自动偏移到上月或下月,偏移后到了上年或下年也一样*/DateTime offsetDay = DateUtil.offsetDay(date, 2);/*默认偏移“月”,传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 没有 HH:mm:ss 会默认 00:00:00正数为:往后偏移负数为:往前偏移为当年第一月或最后一月,自动偏移到上年或下年*/DateTime offsetMonth = DateUtil.offsetMonth(date, 2);/*默认偏移“时”,传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 正数为:往后偏移,没有 HH:mm:ss 会默认从后一天的 00:00:00 开始偏移负数为:往前偏移,没有 HH:mm:ss 会默认从前一天的 24:00:00 开始偏移*/DateTime offsetHour = DateUtil.offsetHour(date, 2);
昨天、明天、往前七天、往后七天、往前一月、往后一月
/*昨天,返回昨天的当前时间,例如:今天为:1956-09-12 05:20:00返回结果为:1956-09-11 05:20:00*/DateTime yesterday = DateUtil.yesterday();/*明天,返回明天的当前时间,例如:今天为:1956-09-12 05:20:00返回结果为:1956-09-13 05:20:00*/DateTime tomorrow = DateUtil.tomorrow();/*上周,实际为:往前七天*/DateTime lastWeek = DateUtil.lastWeek();/*下周,实际为:往后七天*/DateTime nextWeek = DateUtil.nextWeek();/*上个月,实际为:上月的当前时间今天为:1956-09-12 05:20:00返回结果为:1956-08-12 05:20:00*/DateTime lastMonth = DateUtil.lastMonth();/*下个月,实际为:下月的当前时间今天为:1956-09-12 05:20:00返回结果为:1956-10-12 05:20:00*/DateTime nextMonth = DateUtil.nextMonth();
☆日期时间差
计算相差天数,返回 long
/*计算相差天数,传入两个Date,返回long,只比较 yyyy-MM-dd 不比较 HH:mm:ssdate = 1956-09-12date2 = 1956-09-15差值为 3【12、13、14、15】应该是只算了13、14、15,为 3第三个参数为 false 时,与 between 方法一致*/long betweenDay = DateUtil.betweenDay(date, date2, true);/*计算相差天数,传入两个Date,返回long,只比较 yyyy-MM-dd 不比较 HH:mm:ssdate = 1956-09-12date2 = 1956-09-15差值为 3【12、13、14、15】应该是只算了13、14,为 2*/long betweenDAY = DateUtil.between(date, date2, DateUnit.DAY);//精确到毫秒,返回结果为毫秒数long betweenMS = DateUtil.between(date, date2, DateUnit.MS);//精确到秒,返回结果为秒数long betweenSECOND = DateUtil.between(date, date2, DateUnit.SECOND);//精确到分钟,返回结果为分钟数long betweenMINUTE = DateUtil.between(date, date2, DateUnit.MINUTE);//精确到小时,返回结果为小时数long betweenHOUR = DateUtil.between(date, date2, DateUnit.HOUR);
格式化时间差
XX天XX小时XX分XX秒
传入两个Date,计算差值,第三个参数为精确等级(时、分、秒、毫秒等)
String formatBetween = DateUtil.formatBetween(date, date2, BetweenFormatter.Level.MINUTE);
String formatBetween = DateUtil.formatBetween(DateUtil.between(date,date2,DateUnit.MS), BetweenFormatter.Level.MINUTE);
星座、属相
// "天秤座"
String zodiac = DateUtil.getZodiac(9, 12);// "猴"
String chineseZodiac = DateUtil.getChineseZodiac(1956);
年龄、闰年
//年龄int age = DateUtil.ageOfNow("1956-09-12");//是否闰年boolean leapYear = DateUtil.isLeapYear(2003);