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());

}

}