Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位。
对于Date对象,为了便捷,使用了一个DateTime类来代替之,继承自Date对象,主要的便利在于,覆盖了toString()方法,返回yyyy-MM-dd HH:mm:ss形式的字符串,方便在输出时的调用,提供了众多便捷的方法对日期对象操作。

获取当前时间

  1. /**
  2. * 获取当前时间
  3. */
  4. @Test
  5. public void DateUtil(){
  6. //当前时间
  7. Date date = DateUtil.date();
  8. System.out.println(date);
  9. //当前时间
  10. Date date2 = DateUtil.date(Calendar.getInstance());
  11. System.out.println(date2);
  12. //当前时间
  13. Date date3 = DateUtil.date(System.currentTimeMillis());
  14. System.out.println(date3);
  15. //当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
  16. String now = DateUtil.now();
  17. System.out.println(now);
  18. //当前日期字符串,格式:yyyy-MM-dd
  19. String today= DateUtil.today();
  20. System.out.println(today);
  21. }

格式化日期输出

  1. /**
  2. * 格式化日期输出
  3. */
  4. @Test
  5. public void DateParse(){
  6. String dateStr = "2022-04-19";
  7. //2022-04-19 00:00:00
  8. Date date = DateUtil.parse(dateStr);
  9. System.out.println(date);
  10. //2022/04/19
  11. String format = DateUtil.format(date, "yyyy/MM/dd");
  12. System.out.println(format);
  13. //2022-04-19
  14. String formatDate = DateUtil.formatDate(date);
  15. System.out.println(formatDate);
  16. //2022-04-19 00:00:00
  17. String formatDateTime = DateUtil.formatDateTime(date);
  18. System.out.println(formatDateTime);
  19. //00:00:00
  20. String formatTime = DateUtil.formatTime(date);
  21. System.out.println(formatTime);
  22. }

获取Date对象

  1. /**
  2. * 获取Date对象的某个部分
  3. */
  4. @Test
  5. public void DatePart(){
  6. Date date = DateUtil.date();
  7. System.out.println(DateUtil.year(date));
  8. //3 + 1
  9. System.out.println(DateUtil.month(date));
  10. //APRIL 4
  11. System.out.println(DateUtil.monthEnum(date));
  12. }

开始和结束时间

  1. /**
  2. * 开始和结束时间
  3. */
  4. @Test
  5. public void beginOfDay(){
  6. String dateStr = "2022-03-01 22:33:23";
  7. Date date = DateUtil.parse(dateStr);
  8. //一天的开始,结果:2022-03-01 00:00:00
  9. Date beginOfDay = DateUtil.beginOfDay(date);
  10. System.out.println(beginOfDay);
  11. //一天的结束,结果:2022-03-01 23:59:59
  12. Date endOfDay = DateUtil.endOfDay(date);
  13. System.out.println(endOfDay);
  14. }

日期时间偏移

  1. /**
  2. * 日期时间偏移
  3. * //昨天
  4. * DateUtil.yesterday()
  5. * //明天
  6. * DateUtil.tomorrow()
  7. * //上周
  8. * DateUtil.lastWeek()
  9. * //下周
  10. * DateUtil.nextWeek()
  11. * //上个月
  12. * DateUtil.lastMonth()
  13. * //下个月
  14. * DateUtil.nextMonth()
  15. */
  16. @Test
  17. public void offset(){
  18. String dateStr = "2022-03-01 22:33:23";
  19. //2022-03-01 22:33:23
  20. Date date = DateUtil.parse(dateStr);
  21. System.out.println(date);
  22. //2022-03-03 22:33:23
  23. Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
  24. System.out.println(newDate);
  25. //2022-03-04 22:33:23
  26. DateTime newDate2 = DateUtil.offsetDay(date, 3);
  27. System.out.println(newDate2);
  28. //2022-03-01 19:33:23
  29. DateTime newDate3 = DateUtil.offsetHour(date, -3);
  30. System.out.println(newDate3);
  31. }

日期时间差

  1. /**
  2. * 日期时间差
  3. * 有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法
  4. */
  5. @Test
  6. public void between(){
  7. String dateStr1 = "2022-03-01 22:33:23";
  8. Date date1 = DateUtil.parse(dateStr1);
  9. String dateStr2 = "2022-04-01 23:33:23";
  10. Date date2 = DateUtil.parse(dateStr2);
  11. //相差一个月,31
  12. long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
  13. System.out.println(betweenDay);
  14. }

获取当前日期时间

  1. /**
  2. * 获取当前日期时间
  3. */
  4. @Test
  5. public void DateTime(){
  6. Date date = new Date();
  7. //new方式创建
  8. DateTime time = new DateTime(date);
  9. System.out.println(time);
  10. //of方式创建
  11. DateTime now = DateTime.now();
  12. DateTime dt = DateTime.of(date);
  13. System.out.println(now);
  14. System.out.println(dt);
  15. }

使用对象获取年月日

  1. /**
  2. * 使用对象
  3. */
  4. @Test
  5. public void DateTimeObject(){
  6. DateTime dateTime = new DateTime("2022-04-18 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
  7. int year = dateTime.year();
  8. System.out.println(year);
  9. int month = dateTime.month()+1;
  10. System.out.println(month);
  11. int day = dateTime.dayOfMonth();
  12. System.out.println(day);
  13. }

DateTime转字符串

  1. @Test
  2. public void dateStr(){
  3. DateTime dateTime = new DateTime("2022-04-18 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
  4. String dateStr = dateTime.toString();
  5. System.out.println(dateStr);
  6. }