Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位。
对于Date对象,为了便捷,使用了一个DateTime类来代替之,继承自Date对象,主要的便利在于,覆盖了toString()方法,返回yyyy-MM-dd HH:mm:ss形式的字符串,方便在输出时的调用,提供了众多便捷的方法对日期对象操作。
获取当前时间
/** * 获取当前时间 */ @Test public void DateUtil(){ //当前时间 Date date = DateUtil.date(); System.out.println(date); //当前时间 Date date2 = DateUtil.date(Calendar.getInstance()); System.out.println(date2); //当前时间 Date date3 = DateUtil.date(System.currentTimeMillis()); System.out.println(date3); //当前时间字符串,格式:yyyy-MM-dd HH:mm:ss String now = DateUtil.now(); System.out.println(now); //当前日期字符串,格式:yyyy-MM-dd String today= DateUtil.today(); System.out.println(today); }
格式化日期输出
/** * 格式化日期输出 */ @Test public void DateParse(){ String dateStr = "2022-04-19"; //2022-04-19 00:00:00 Date date = DateUtil.parse(dateStr); System.out.println(date); //2022/04/19 String format = DateUtil.format(date, "yyyy/MM/dd"); System.out.println(format); //2022-04-19 String formatDate = DateUtil.formatDate(date); System.out.println(formatDate); //2022-04-19 00:00:00 String formatDateTime = DateUtil.formatDateTime(date); System.out.println(formatDateTime); //00:00:00 String formatTime = DateUtil.formatTime(date); System.out.println(formatTime); }
获取Date对象
/** * 获取Date对象的某个部分 */ @Test public void DatePart(){ Date date = DateUtil.date(); System.out.println(DateUtil.year(date)); //3 + 1 System.out.println(DateUtil.month(date)); //APRIL 4月 System.out.println(DateUtil.monthEnum(date)); }
开始和结束时间
/** * 开始和结束时间 */ @Test public void beginOfDay(){ String dateStr = "2022-03-01 22:33:23"; Date date = DateUtil.parse(dateStr); //一天的开始,结果:2022-03-01 00:00:00 Date beginOfDay = DateUtil.beginOfDay(date); System.out.println(beginOfDay); //一天的结束,结果:2022-03-01 23:59:59 Date endOfDay = DateUtil.endOfDay(date); System.out.println(endOfDay); }
日期时间偏移
/** * 日期时间偏移 * //昨天 * DateUtil.yesterday() * //明天 * DateUtil.tomorrow() * //上周 * DateUtil.lastWeek() * //下周 * DateUtil.nextWeek() * //上个月 * DateUtil.lastMonth() * //下个月 * DateUtil.nextMonth() */ @Test public void offset(){ String dateStr = "2022-03-01 22:33:23"; //2022-03-01 22:33:23 Date date = DateUtil.parse(dateStr); System.out.println(date); //2022-03-03 22:33:23 Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2); System.out.println(newDate); //2022-03-04 22:33:23 DateTime newDate2 = DateUtil.offsetDay(date, 3); System.out.println(newDate2); //2022-03-01 19:33:23 DateTime newDate3 = DateUtil.offsetHour(date, -3); System.out.println(newDate3); }
日期时间差
/** * 日期时间差 * 有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法 */ @Test public void between(){ String dateStr1 = "2022-03-01 22:33:23"; Date date1 = DateUtil.parse(dateStr1); String dateStr2 = "2022-04-01 23:33:23"; Date date2 = DateUtil.parse(dateStr2); //相差一个月,31天 long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY); System.out.println(betweenDay); }
获取当前日期时间
/** * 获取当前日期时间 */ @Test public void DateTime(){ Date date = new Date(); //new方式创建 DateTime time = new DateTime(date); System.out.println(time); //of方式创建 DateTime now = DateTime.now(); DateTime dt = DateTime.of(date); System.out.println(now); System.out.println(dt); }
使用对象获取年月日
/** * 使用对象 */ @Test public void DateTimeObject(){ DateTime dateTime = new DateTime("2022-04-18 12:34:23", DatePattern.NORM_DATETIME_FORMAT); int year = dateTime.year(); System.out.println(year); int month = dateTime.month()+1; System.out.println(month); int day = dateTime.dayOfMonth(); System.out.println(day); }
DateTime转字符串
@Test public void dateStr(){ DateTime dateTime = new DateTime("2022-04-18 12:34:23", DatePattern.NORM_DATETIME_FORMAT); String dateStr = dateTime.toString(); System.out.println(dateStr); }