這是一個(gè)關(guān)于 日期的工具類
關(guān)于日期的內(nèi)容,我們?cè)谄綍r(shí)工作和學(xué)習(xí)中經(jīng)常會(huì)用到,現(xiàn)在總結(jié)了一下,收藏起來,需要用的時(shí)候拿過來直接用,豈不是美滋滋!
需要的jar包為hutool.rar
這個(gè)是下載鏈接鏈接:https://pan.baidu.com/s/1D7lerUywxBkV1XkzF8J5EQ
提取碼:msrc
先上運(yùn)行過后的效果圖




怎么樣這個(gè)工具包是不是很強(qiáng)大呢,其中包括了:
字符串轉(zhuǎn)日期,日期轉(zhuǎn)字符串,當(dāng)前日期的月份,當(dāng)前日期的年份,當(dāng)前日期月份枚舉信息,一天的開始和結(jié)束時(shí)間,獲取一天,兩天,三天以后的日期,獲取上周 ,下周,上個(gè)月,下個(gè)月的日期,毫秒數(shù)時(shí)間戳,精確到秒,分,時(shí),基于生日獲取年齡,基于年份獲取是否閏年等等。。。。
下面上代碼,大家可以看一下
import java.util.Date;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.BetweenFormater.Level;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.util.StrUtil;
public class Test {
? ? @Comment("字符串轉(zhuǎn)日期")
? ? public void test0() {
? ? ? ? printDefaultFormat();
? ? ? ? Date d;
? ? ? ? String str3 = "12:12:12";
? ? ? ? d = DateUtil.parse(str3);
? ? ? ? p1("字符串",str3, "日期格式",d);
? ? ? ? String str1 = "2012-12-12";
? ? ? ? d = DateUtil.parse(str1);
? ? ? ? p1("字符串",str1, "日期格式",d);
? ? ? ? String str4 = "2012-12-12 12:12";
? ? ? ? d = DateUtil.parse(str4);
? ? ? ? p1("字符串",str4, "日期格式",d);
? ? ? ? String str2 = "2012-12-12 12:12:12";
? ? ? ? d = DateUtil.parse(str2);
? ? ? ? p1("字符串",str2, "日期格式",d);
? ? }
? ? @Comment("日期轉(zhuǎn)字符串")
? ? public void test1() {
? ? ? ? Date d = new Date();
? ? ? ? //結(jié)果 2017/03/01
? ? ? ? String format = DateUtil.format(d, "yyyy/MM/dd");
? ? ? ? //常用格式的格式化,結(jié)果:2017-03-01
? ? ? ? String formatDate = DateUtil.formatDate(d);
? ? ? ? //結(jié)果:2017-03-01 00:00:00
? ? ? ? String formatDateTime = DateUtil.formatDateTime(d);
? ? ? ? //結(jié)果:00:00:00
? ? ? ? String formatTime = DateUtil.formatTime(d);
? ? ? ? p1("日期格式",d, "自定義格式的字符串",format);
? ? ? ? p1("日期格式",d, "只是日期格式",formatDate);
? ? ? ? p1("日期格式",d, "日期和時(shí)間格式",formatDateTime);
? ? ? ? p1("日期格式",d, "只是時(shí)間格式",formatTime);
? ? }
? ? @Comment("獲取部分信息")
? ? public void test2() {
? ? ? ? Date d = new Date();
? ? ? ? //獲得年的部分
? ? ? ? int year= DateUtil.year(d);
? ? ? ? //獲得月份,從0開始計(jì)數(shù)
? ? ? ? int month = DateUtil.month(d);
? ? ? ? //獲得月份枚舉
? ? ? ? Enum months= DateUtil.monthEnum(d);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(d), "年份",year);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(d), "月份",month);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(d), "月份枚舉信息",months);
? ? }
? ? @Comment("開始和結(jié)束時(shí)間")
? ? public void test3() {
? ? ? ? Date date = new Date();
? ? ? ? //一天的開始,結(jié)果:2017-03-01 00:00:00
? ? ? ? Date beginOfDay = DateUtil.beginOfDay(date);
? ? ? ? //一天的結(jié)束,結(jié)果:2017-03-01 23:59:59
? ? ? ? Date endOfDay = DateUtil.endOfDay(date);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "開始時(shí)間",beginOfDay);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "結(jié)束時(shí)間",endOfDay);
? ? ? ? c("這個(gè)在查詢數(shù)據(jù)庫時(shí),根據(jù)日期查一個(gè)范圍內(nèi)的數(shù)據(jù)就很有用");
? ? }
? ? @Comment("日期時(shí)間偏移")
? ? public void test4() {
? ? ? ? Date date = new Date();
? ? ? ? Date d1 = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
? ? ? ? Date d2 = DateUtil.offsetDay(date, 3);
? ? ? ? Date d3= DateUtil.offsetHour(date, -3);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "兩天之后的日期",d1);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "三天之后的日期",d2);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "三小時(shí)之前的日期",d3);
? ? }
? ? @Comment("偏移簡化用法")
? ? public void test5() {
? ? ? ? Date date = new Date();
? ? ? ? Date d1= DateUtil.yesterday();
? ? ? ? Date d2=DateUtil.tomorrow();
? ? ? ? Date d3=DateUtil.lastWeek();
? ? ? ? Date d4=DateUtil.nextWeek();
? ? ? ? Date d5=DateUtil.lastMonth();
? ? ? ? Date d6=DateUtil.nextMonth();
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "昨天",d1);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "明天",d2);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "上周",d3);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "下周",d4);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "上個(gè)月",d5);
? ? ? ? p2("當(dāng)前日期",DateUtil.formatDateTime(date), "下個(gè)月",d6);
? ? }
? ? @Comment("日期時(shí)間差")
? ? public void test6() {
? ? ? ? Date date1 = DateUtil.parse("2012-12-12 12:12:12");
? ? ? ? Date date2 = DateUtil.parse("2013-13-13 13:13:13");
? ? ? ? long b1 = DateUtil.between(date1, date2, DateUnit.MS);
? ? ? ? long b2 = DateUtil.between(date1, date2, DateUnit.SECOND);
? ? ? ? long b3 = DateUtil.between(date1, date2, DateUnit.MINUTE);
? ? ? ? long b4 = DateUtil.between(date1, date2, DateUnit.HOUR);
? ? ? ? long b5 = DateUtil.between(date1, date2, DateUnit.DAY);
? ? ? ? long b6 = DateUtil.between(date1, date2, DateUnit.WEEK);
? ? ? ? p2("當(dāng)前如下兩個(gè)日期",date1 + " " + date2, "相差毫秒",b1);
? ? ? ? p2("當(dāng)前如下兩個(gè)日期",date1 + " " + date2, "相差秒",b2);
? ? ? ? p2("當(dāng)前如下兩個(gè)日期",date1 + " " + date2, "相差分",b3);
? ? ? ? p2("當(dāng)前如下兩個(gè)日期",date1 + " " + date2, "相差小時(shí)",b4);
? ? ? ? p2("當(dāng)前如下兩個(gè)日期",date1 + " " + date2, "相差天",b5);
? ? ? ? p2("當(dāng)前如下兩個(gè)日期",date1 + " " + date2, "相差星期",b6);
? ? }
? ? @Comment("格式化時(shí)間差")
? ? public void test7() {
? ? ? ? long between = System.currentTimeMillis();
? ? ? ? String s0 = DateUtil.formatBetween(between, Level.MILLSECOND);
? ? ? ? String s1 = DateUtil.formatBetween(between, Level.SECOND);
? ? ? ? String s2 = DateUtil.formatBetween(between, Level.MINUTE);
? ? ? ? String s3 = DateUtil.formatBetween(between, Level.HOUR);
? ? ? ? String s4 = DateUtil.formatBetween(between, Level.DAY);
? ? ? ? p2("毫秒數(shù)",between, "對(duì)應(yīng)時(shí)間,精度到毫秒",s0);
? ? ? ? p2("毫秒數(shù)",between, "對(duì)應(yīng)時(shí)間,精度到秒",s1);
? ? ? ? p2("毫秒數(shù)",between, "對(duì)應(yīng)時(shí)間,精度到秒分鐘",s2);
? ? ? ? p2("毫秒數(shù)",between, "對(duì)應(yīng)時(shí)間,精度到秒小時(shí)",s3);
? ? ? ? p2("毫秒數(shù)",between, "對(duì)應(yīng)時(shí)間,精度到秒天",s4);
? ? }
? ? @Comment("性能統(tǒng)計(jì)")
? ? public void test8() {
? ? ? ? int loopcount = 100;
? ? ? ? TimeInterval timer = DateUtil.timer();
? ? ? ? forloop(loopcount);
? ? ? ? long interval1= timer.interval();
? ? ? ? forloop(loopcount);
? ? ? ? long interval2 = timer.intervalRestart();
? ? ? ? forloop(loopcount);
? ? ? ? long interval3 = timer.interval();
? ? ? ? p3("性能統(tǒng)計(jì),總共花費(fèi)了 (毫秒數(shù))",interval1);
? ? ? ? p3("性能統(tǒng)計(jì),總共花費(fèi)了 (毫秒數(shù)),并重置",interval2);
? ? ? ? p3("性能統(tǒng)計(jì),總共花費(fèi)了 (毫秒數(shù))",interval3);
? ? }
? ? @Comment("其他")
? ? public void test9() {
? ? ? ? String birthDay = "1949-10-01";
? ? ? ? int age = DateUtil.ageOfNow(birthDay);
? ? ? ? int year = 2012;
? ? ? ? boolean isLeap= DateUtil.isLeapYear(year);
? ? ? ? String now = DateUtil.now();
? ? ? ? String today =? DateUtil.today();
? ? ? ? p2("生日",birthDay,"年齡",age);
? ? ? ? p2("年份",year,"是否閏年",isLeap);
? ? ? ? p3("現(xiàn)在",now);
? ? ? ? p3("今天",today);
? ? }
? ? private void forloop(int total) {
? ? ? ? for (int i = 0; i < total; i++) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? Thread.sleep(1);
? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? public void printDefaultFormat() {
? ? ? ? System.out.println("DateUtil默認(rèn)會(huì)對(duì)如下格式進(jìn)行識(shí)別:");
? ? ? ? System.out.println();
? ? ? ? System.out.println("\tyyyy-MM-dd HH:mm:ss");
? ? ? ? System.out.println("\tyyyy/MM/dd HH:mm:ss");
? ? ? ? System.out.println("\tyyyy.MM.dd HH:mm:ss");
? ? ? ? System.out.println("\tyyyy年MM月dd日 HH時(shí)mm分ss秒");
? ? ? ? System.out.println("\tyyyy-MM-dd");
? ? ? ? System.out.println("\tyyyy/MM/dd");
? ? ? ? System.out.println("\tyyyy.MM.dd");
? ? ? ? System.out.println("\tHH:mm:ss");
? ? ? ? System.out.println("\tHH時(shí)mm分ss秒");
? ? ? ? System.out.println("\tyyyy-MM-dd HH:mm");
? ? ? ? System.out.println("\tyyyy-MM-dd HH:mm:ss.SSS");
? ? ? ? System.out.println("\tyyyyMMddHHmmss");
? ? ? ? System.out.println("\tyyyyMMddHHmmssSSS");
? ? ? ? System.out.println("\tyyyyMMdd");
? ? ? ? System.out.println();
? ? }?
? ? private String preComment = null;?
? ? private void c(String msg) {
? ? ? ? System.out.printf("\t備注:%s%n",msg);
? ? }
? ? private void p1(String type1, Object value1, String type2, Object value2) {
? ? ? ? p(type1, value1, type2, value2, "format1");
? ? }
? ? private void p2(String type1, Object value1, String type2, Object value2) {
? ? ? ? p(type1, value1, type2, value2, "format2");
? ? }
? ? private void p3(String type1, Object value1) {
? ? ? ? p(type1, value1, "", "", "format3");
? ? }
? ? private void p(String type1, Object value1, String type2, Object value2, String format) {
? ? ? ? int padLength = 12;
? ? ? ? type1=StrUtil.padEnd(type1,padLength,Convert.toSBC(" ").charAt(0));
? ? ? ? type2=StrUtil.padEnd(type2,padLength,Convert.toSBC(" ").charAt(0));
? ? ? ? if("format1".equals(format)) {
? ? ? ? ? ? System.out.printf("\t%s的:\t\"%s\" %n\t被轉(zhuǎn)換為----->%n\t%s的 :\t\"%s\" %n%n",type1,value1, type2, value2);
? ? ? ? }
? ? ? ? if("format2".equals(format)) {
? ? ? ? ? ? System.out.printf("\t基于 %s:\t\"%s\" %n\t獲取 %s:\t\"%s\"%n%n",type1,value1, type2, value2);
? ? ? ? }
? ? ? ? if("format3".equals(format)) {
? ? ? ? ? ? System.out.printf("\t%s:\t\"%s\" %n\t%n",type1,value1);
? ? ? ? }
? ? }
? ? private String getTestMethodName(StackTraceElement[] stackTrace) {
? ? ? ? for (StackTraceElement se : stackTrace) {
? ? ? ? ? ? String methodName = se.getMethodName();
? ? ? ? ? ? if(methodName.startsWith("test"))
? ? ? ? ? ? ? ? return methodName;
? ? ? ? }
? ? ? ? return null;
? ? }
? ? @Target({METHOD,TYPE})
? ? @Retention(RetentionPolicy.RUNTIME)
? ? @Inherited
? ? @Documented
? ? public @interface Comment {
? ? ? ? String value();
? ? }
? ? public static void main(String[] args) {
Test test = new Test();
test.test0();
test.test1();
test.test2();
test.test3();
test.test4();
test.test5();
test.test6();
test.test7();
test.test8();
test.test9();
}
}
?
總結(jié)
這個(gè)日期的工具類是我參照一個(gè)教程來的,里面還有很多java的其他教程,通俗易懂,很適合學(xué)習(xí)和鞏固java,大家有興趣可以看一下,地址發(fā)下面了。
https://how2j.cn/k/hutool/hutool-date/1946.html?p=115656
我自己創(chuàng)建了一個(gè)交流java的群,因?yàn)槲乙彩莻€(gè)新人,有很多需要進(jìn)步學(xué)習(xí)的地方,希望你加入我們!
群:917421921
同是菜鳥,我們共進(jìn)步吧!加油!