自己一個(gè)很全面的java日期的工具類,大家有需要的可以拿走!

這是一個(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)步吧!加油!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容