Date、long、Calendar之間的相互轉換
//當前時間 Date date = DateUtil.date(); //當前時間 Date date2 = DateUtil.date(Calendar.getInstance()); //當前時間 Date date3 = DateUtil.date(System.currentTimeMillis()); //當前時間字符串,格式:yyyy-MM-dd HH:mm:ss String now = DateUtil.now(); //當前日期字符串,格式:yyyy-MM-dd String today= DateUtil.today();
字符串轉日期
DateUtil.parse
方法會自動識別一些常用格式,包括:
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd
- HH:mm:ss
- yyyy-MM-dd HH:mm
- yyyy-MM-dd HH:mm:ss.SSS
String dateStr = "2017-03-01"; Date date = DateUtil.parse(dateStr);
我們也可以使用自定義日期格式轉化:
String dateStr = "2017-03-01"; Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
格式化日期輸出
String dateStr = "2017-03-01"; Date date = DateUtil.parse(dateStr); String format = DateUtil.format(date, "yyyy/MM/dd"); Assert.assertEquals("2017/03/01", format); //常用格式的格式化 String formatDate = DateUtil.formatDate(date); Assert.assertEquals("2017-03-01", formatDate); String formatDateTime = DateUtil.formatDateTime(date); Assert.assertEquals("2017-03-01 00:00:00", formatDateTime); String formatTime = DateUtil.formatTime(date); Assert.assertEquals("00:00:00", formatTime);
獲取Date對象的某個部分
Date date = DateUtil.date(); //獲得年的部分 DateUtil.year(date); //獲得月份,從0開始計數 DateUtil.month(date); //獲得月份枚舉 DateUtil.monthEnum(date); //.....
開始和結束時間
有的時候我們需要獲得每天的開始時間、結束時間,每月的開始和結束時間等等,DateUtil也提供了相關方法:
String dateStr = "2017-03-01 22:33:23"; Date date = DateUtil.parse(dateStr); //一天的開始 Date beginOfDay = DateUtil.beginOfDay(date); Assert.assertEquals("2017-03-01 00:00:00", beginOfDay.toString()); //一天的結束 Date endOfDay = DateUtil.endOfDay(date); Assert.assertEquals("2017-03-01 23:59:59", endOfDay.toString());
日期時間偏移
日期或時間的偏移指針對某個日期增加或減少分、小時、天等等,達到日期變更的目的。Hutool也針對其做了大量封裝
String dateStr = "2017-03-01 22:33:23"; Date date = DateUtil.parse(dateStr); Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2); Assert.assertEquals("2017-03-03 22:33:23", newDate.toString()); //常用偏移 DateTime newDate2 = DateUtil.offsetDay(date, 3); Assert.assertEquals("2017-03-04 22:33:23", newDate2.toString()); //常用偏移 DateTime newDate3 = DateUtil.offsetHour(date, -3); Assert.assertEquals("2017-03-01 19:33:23", newDate3.toString());
針對當前時間,提供了簡化的偏移方法(例如昨天、上周、上個月等):
//昨天 DateUtil.yesterday() //明天 DateUtil.tomorrow() //上周 DateUtil.lastWeek() //下周 DateUtil.nextWeek() //上個月 DateUtil.lastMonth() //下個月 DateUtil.nextMonth()
日期時間差
有時候我們需要計算兩個日期之間的時間差(相差天數、相差小時數等等),Hutool將此類方法封裝為between方法:
String dateStr1 = "2017-03-01 22:33:23"; Date date1 = DateUtil.parse(dateStr1); String dateStr2 = "2017-04-01 23:33:23"; Date date2 = DateUtil.parse(dateStr2); long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY); Assert.assertEquals(31, betweenDay);//相差一個月,31天
格式化時間差
有時候我們希望看到易讀的時間差,比如XX天XX小時XX分XX秒,此時使用DateUtil.formatBetween
方法:
//Level.MINUTE表示精確到分 String formatBetween = DateUtil.formatBetween(between, Level.MINUTE); //輸出:31天1小時 Console.log(formatBetween);
計時器
計時器用於計算某段代碼或過程花費的時間
TimeInterval timer = DateUtil.timer();
//--------------------------------- //-------這是執行過程 //--------------------------------- timer.interval();//花費毫秒數 timer.intervalRestart();//返回花費時間,並重置開始時間 timer.intervalMinute();//花費分鍾數
其它
//年齡 DateUtil.ageOfNow("1990-01-30"); //是否閏年 DateUtil.isLeapYear(2017);