Hutool的出现,就是为了简化对Java8中日期的操作。
测试时,需要在项目中引入以下依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.6</version></dependency> |
package com.gao.test;
import cn.hutool.core.date.*;
import org.junit.Test;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
public class HutoolTest {
@Test
public void test() {
获取当前时间
Date date = DateUtil.date();
获取当前时间
Date date2 = DateUtil.date(Calendar.getInstance());
获取当前时间
Date date3 = DateUtil.date(Calendar.getInstance());
以字符串形式获取当前时间,格式:yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();
以字符串形式获取当前时间,格式:yyyy-MM-dd
String today = DateUtil.today();
System.out.println("date = " + date);
System.out.println("date2 = " + date2);
System.out.println("date3 = " + date3);
System.out.println("now = " + now);
System.out.println("today = " + today);
}
@Test
public void test2() {
把字符串解析为日期对象
String dateStr = "2020-2-22";
Date date = DateUtil.parse(dateStr);
System.out.println("date = " + date);
指定日期格式,进行解析,注意输出的内容是Date的toString的返回值
所以输出的结果还是:yyyy-MM-dd的格式!
年2月2日";
年MM月dd日");
System.out.println("date2 = " + date2);
}
@Test
public void test3() {
格式化Date对象为String
Date date = DateUtil.date();
默认格式:yyyy-MM-dd
String format = DateUtil.formatDate(date);
System.out.println("format = " + format);
默认格式:yyyy-MM-dd HH:mm:ss
String format2 = DateUtil.formatDateTime(date);
System.out.println("format2 = " + format2);
默认格式: HH:mm:ss
String format3 = DateUtil.formatTime(date);
System.out.println("format3 = " + format3);
自定义格式
String format4 = DateUtil.format(date, "yyyy/MM/dd E");
System.out.println("format4 = " + format4);
}
@Test
public void test4() {
获取Date对象的某个部分
Date date = DateUtil.date();
获取年
int year = DateUtil.year(date);
获取月
int month = DateUtil.month(date);
获取月份枚举
Month monthEnum = DateUtil.monthEnum(date);
System.out.println("year = " + year);
System.out.println("month = " + (month + 1));
System.out.println("monthEnum = " + monthEnum);
}
@Test
public void test5() {
获取开始时间和结束时间
String dateStr = "2020-2-22";
Date date = DateUtil.parse(dateStr);
Date beginOfDay = DateUtil.beginOfDay(date);
Date endOfDay = DateUtil.endOfDay(date);
System.out.println("beginOfDay = " + beginOfDay);
System.out.println("endOfDay = " + endOfDay);
以此类推,还可以获取一个月的开始时间,一个月的结束时间
}
@Test
public void test6() {
日期偏移
String dateStr = "2020-2-22 2:22:22";
Date date = DateUtil.parse(dateStr);
Date newDate = DateUtil.offsetDay(date, 3);
System.out.println("newDate = " + newDate);
Date newDate2 = DateUtil.offsetMonth(date, 5);
System.out.println("newDate2 = " + newDate2);
Date newDate3 = DateUtil.offset(date, DateField.YEAR, -1);
System.out.println("newDate3 = " + newDate3);
}
@Test
public void test7() {
今天
String today = DateUtil.today();
昨天
Date yesterday = DateUtil.yesterday();
明天
Date tomorrow = DateUtil.tomorrow();
上周
Date lastWeek = DateUtil.lastWeek();
下周
Date nextWeek = DateUtil.nextWeek();
上月
Date lastMonth = DateUtil.lastMonth();
下月
Date nextMonth = DateUtil.nextMonth();
System.out.println("today = " + today);
System.out.println("yesterday = " + yesterday);
System.out.println("tomorrow = " + tomorrow);
System.out.println("lastWeek = " + lastWeek);
System.out.println("nextWeek = " + nextWeek);
System.out.println("lastMonth = " + lastMonth);
System.out.println("nextMonth = " + nextMonth);
}
@Test
public void test8() {
计算时间差
String dateStr1 = "2008-8-8 20:00:00";
String dateStr2 = "2012-12-21 00:00:00";
Date date = DateUtil.parse(dateStr1);
Date date2 = DateUtil.parse(dateStr2);
long betweenDay = DateUtil.between(date, date2, DateUnit.DAY);
System.out.println("betweenDay = " + betweenDay);
long betweenHour = DateUtil.between(date, date2, DateUnit.HOUR);
System.out.println("betweenHour = " + betweenHour);
long betweenSecond = DateUtil.between(date, date2, DateUnit.SECOND);
System.out.println("betweenSecond = " + betweenSecond);
}
@Test
public void test9() {
格式化时间差
String dateStr1 = "2008-8-8 20:00:00";
String dateStr2 = "2012-12-21 00:30:22";
Date date = DateUtil.parse(dateStr1);
Date date2 = DateUtil.parse(dateStr2);
精确到小时
String result = DateUtil.formatBetween(date, date2, BetweenFormater.Level.HOUR);
精确到小时 = " + result);
精确到分钟
String result2 = DateUtil.formatBetween(date, date2, BetweenFormater.Level.MINUTE);
精确到分钟 = " + result2);
精确到秒
String result3 = DateUtil.formatBetween(date, date2, BetweenFormater.Level.SECOND);
精确到秒 = " + result3);
不指定Level时,默认精确到秒
String result4 = DateUtil.formatBetween(date, date2);
默认精确到秒 = " + result4);
}
@Test
public void test10() throws Exception {
统计代码执行时长
TimeInterval timer = DateUtil.timer();
int sum = 0;
for (int i = 0; i < 30; i++) {
sum += i;
Thread.sleep(100);
}
返回花费的毫秒数,并重置开始时间
long interval = timer.intervalRestart();
System.out.println("interval = " + interval);
}
@Test
public void test11() {
根据指定日期计算年龄
String birthDay = "1990-10-20";
String birthDay2 = "1990-10-26";
int age = DateUtil.ageOfNow(birthDay);
int age2 = DateUtil.ageOfNow (birthDay2);
System.out.println(birthDay + ": " + age);
System.out.println(birthDay2 + ": " + age2);
判断闰年
boolean leapYear = DateUtil.isLeapYear(2020);
System.out.println("leapYear = " + leapYear);
}
@Test
public void test12() {
创建DateTime对象
方式创建
DateTime dt = new DateTime();
System.out.println("dt = " + dt);
方式创建
Date date = new Date();
DateTime dt2 = DateTime.of(date);
System.out.println("dt2 = " + dt2);
方式创建
DateTime dt3 = DateTime.now();
System.out.println("dt3 = " + dt3);
用指定日期创建DateTime对象
DateTime dt4 = new DateTime("2017-1-2 15:32:23", DatePattern.NORM_DATETIME_FORMAT);
System.out.println("dt4 = " + dt4);
用LocalDateTime创建DateTime对象
DateTime dt5 = new DateTime(LocalDateTime.now());
System.out.println("dt5 = " + dt5);
}
@Test
public void test13() {
DateTime dt = new DateTime("2017-10-1 6:05:22", DatePattern.NORM_DATETIME_FORMAT);
默认情况下DateTime为可变对象,此时 dt == dt2 结果为true
DateTime dt2 = dt.offset(DateField.YEAR, 10);
System.out.println(dt == dt2);
设置为不可变对象后,变动将返回新对象,此时 dt == dt2 结果为false
把DateTime对象设置为不可变对象的价值是:如果DateTime作为一个对象的私有属性,
则无法通过getter修改该对象的DateTime属性!
dt.setMutable(false);
dt2 = dt.offset(DateField.YEAR, 15);
System.out.println(dt == dt2);
}
@Test
public void test14() {
农历日期
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-1-25"));
一月
String chineseMonth = date.getChineseMonth();
System.out.println("chineseMonth = " + chineseMonth);
正月
String chineseMonthName = date.getChineseMonthName();
System.out.println("chineseMonthName = " + chineseMonthName);
初一
String chineseDay = date.getChineseDay();
System.out.println("chineseDay = " + chineseDay);
庚子
String cyclical = date.getCyclical();
System.out.println("cyclical = " + cyclical);
鼠
String chineseZodiac = date.getChineseZodiac();
System.out.println("chineseZodiac = " + chineseZodiac);
春节
String festivals = date.getFestivals();
System.out.println("festivals = " + festivals);
庚子鼠年 正月初一
System.out.println(date.toString());
}
}