Java經常使用日期工具類,常規的日期、時間格式轉換,字符串轉Date對象,Date對象轉字符串,日期比較,日期添加指定年、月、天等,計算兩個日期之間相差的天數、月數、年數等;java
DateUtils.java工具
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @author JL * @version V1.0 * @Description 用java.util.Calendar封裝日期、時間操做工具類 */ public class DateUtils { public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; public static final String YYYY_MM_DD = "yyyy-MM-dd"; public static final String HH_MM_SS = "HH:mm:ss"; public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static final String YYYYMMDD = "yyyyMMdd"; public static final String HHMMSS = "HHmmss"; public static String getTimeStr(Date date, String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } public static String getTimeStr(String pattern){ return getTimeStr(new Date(), pattern); } public static String getTimeStr(Date date){ return getTimeStr(date, YYYY_MM_DD_HH_MM_SS); } public static String getTimeStr(){ return getTimeStr(new Date(), YYYY_MM_DD_HH_MM_SS); } public static String getDateStr(Date date){ return getTimeStr(date, YYYY_MM_DD); } public static String getDateStr(){ return getTimeStr(new Date(), YYYY_MM_DD); } public static Long getTimeToLong(){ return Long.parseLong(getTimeStr(new Date(), YYYYMMDDHHMMSS)); } public static Long getTimeToLong(String timeStr){ timeStr = timeStr.replaceAll("-",""); timeStr = timeStr.replaceAll("/",""); timeStr = timeStr.replaceAll(" ",""); timeStr = timeStr.replaceAll(":",""); return Long.parseLong(timeStr); } public static Long getTimeToLong(Date date){ return Long.parseLong(getTimeStr(date, YYYYMMDDHHMMSS)); } public static Date getTime(String timeStr, String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); try{ return sdf.parse(timeStr); }catch(ParseException pe){ System.out.println("時間格式不對:" + pe.getMessage()); } return null; } public static Date getTime(String timeStr){ return getTime(timeStr, YYYY_MM_DD_HH_MM_SS);//默認YYYY_MM_DD_HH_MM_SS } public static Date getDate(String dateStr){ return getTime(dateStr, YYYY_MM_DD);//默認YYYY_MM_DD } public static int getYear(){ return Calendar.getInstance().get(Calendar.YEAR); } public static int getMonth(){ return Calendar.getInstance().get(Calendar.MONTH) + 1; } public static int getDay(){ return Calendar.getInstance().get(Calendar.DAY_OF_MONTH); } public static Date addDayDate(int amount){ return addTimeDate(Calendar.DAY_OF_MONTH, amount); } public static int addDay(int amount){ return addTime(Calendar.DAY_OF_MONTH, amount); } public static Date addMonthDate(int amount){ return addTimeDate(Calendar.MONTH, amount); } public static int addMonth(int amount){ return addTime(Calendar.MONTH, amount); } public static Date addYearDate(int amount){ return addTimeDate(Calendar.YEAR, amount); } public static int addYear(int amount){ return addTime(Calendar.YEAR, amount); } public static Date addMillisecondDate(long amout){ return new Date(addMillisecond(amout)); } public static long addMillisecond(long amout){ return new Date().getTime() + amout; } //按不一樣的單位,添加時間值,返回添加後的時間值 public static int addTime(int field, int amount){ Calendar calendar = Calendar.getInstance(); calendar.add(field, amount); return calendar.get(field); } //按不一樣的單位,添加時間值,返回date對象 public static Date addTimeDate(int field, int amount){ Calendar calendar = Calendar.getInstance(); calendar.add(field, amount); return calendar.getTime(); } //相差年數(按月數統計,若是不按月數統計,直接取年份相減便可) public static int differYear(Date date1, Date date2){ int dMonth = differMonth(date1, date2); return dMonth > 0 ? dMonth / 12 : 0; } //相差月數(精確到天) public static int differMonth(Date date1, Date date2){ Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); //年相減 * 12 + 月相減 int year = calendar1.get(Calendar.YEAR) - calendar2.get(Calendar.YEAR); int month = calendar1.get(Calendar.MONTH) - calendar2.get(Calendar.MONTH); int day = calendar1.get(Calendar.DAY_OF_MONTH) - calendar2.get(Calendar.DAY_OF_MONTH); //按天然天推算,如:本月25號,到下月5號,只相差10天(按30天計算),不足一個月,須要減一個月 //大於1,是由於按天,一個月從1號到30號算一個完整月,到下個月1號,已經多了一天 //說明,day2在day1的前面2天,相差的天數,不足一個月,如:本月25號到下月24號爲一個完整天然月; if (day > 1){ return year * 12 + month - 1; } return year * 12 + month; } //相差天數 public static long differDay(Date date1, Date date2){ long time = date1.getTime() - date2.getTime(); return time / (1000*60*60*24); } //是否同一天,無論時分秒 public static boolean isSameDay(Date date1, Date date2){ Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6); } //是否同一天,毫秒級 public static boolean isSameInstant(Date date1, Date date2){ return date1.getTime() == date2.getTime(); } //一週中的第幾天,默認從週日(0)開始計算 public static int getWeek(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.DAY_OF_WEEK); } //一年中的第幾個季度 public static int getSeason(Date date) { int season = 1; Calendar c = Calendar.getInstance(); c.setTime(date); int month = c.get(Calendar.MONTH); switch (month) { case Calendar.JANUARY: case Calendar.FEBRUARY: case Calendar.MARCH: season = 1; break; case Calendar.APRIL: case Calendar.MAY: case Calendar.JUNE: season = 2; break; case Calendar.JULY: case Calendar.AUGUST: case Calendar.SEPTEMBER: season = 3; break; case Calendar.OCTOBER: case Calendar.NOVEMBER: case Calendar.DECEMBER: season = 4; break; } return season; } public static void main(String[] args) { System.out.println(getYear()+"\t"+getMonth()+"\t"+getDay()); System.out.println(getTimeToLong()); System.out.println(getTimeToLong("2019-01-12 22:10:01")); System.out.println(getTimeToLong("2019/01/12 22:10:01")); System.out.println(getTimeToLong(new Date())); System.out.println(getTimeStr(new Date(),HH_MM_SS)); System.out.println(addDay(-13)); System.out.println(addMillisecond(15000)); System.out.println(getTimeStr(addDayDate(-5))); System.out.println(differDay(getTime("2019-06-25 20:00:00"), getTime("2019-06-20 21:59:59"))); System.out.println(differYear(getTime("2019-06-25 20:00:00"), getTime("2017-06-26 21:59:59"))); System.out.println(getWeek(new Date())); } }
說明:學習
作過項目的人都知道,不少寫過的可重複利用的代碼塊或有用的工具類沒有怎麼整理,當須要的時候,又得打開項目查找一翻,雖然功能開發不難,可是又得花時間成本去寫去測試,這樣的重複造輪子的事情太屢次了;所以不如把輪子保留,供你們一塊兒使用;測試
1.這個輪子能夠有:須要使用的時候確實還不存在這個組件。
2.我須要的時候輪子不在:每一種技術或工具產生都有它的項目背景,當代碼寫在項目裏的時候,我知道有這個東西,當換了一個項目或公司後,沒有備份也沒有記錄,這個時候你不在了,又得花時間手打一遍;
3.我不知道是否是造輪子:大多數狀況下初學者很難分清楚本身是否是在重複造輪子,事實上造輪子不是我目的。個人目的是完成工做任務,任務完成的速度越快越好,質量越高越好。而不是去判斷本身在不在造輪子。
4.不想重複花時間造輪子:有時候還會碰到一些並不困難可是很佔時間的東西,固然有現成的輪子是花時間最少的;
5.我就是想學習輪子:初學者的並非在重複造輪子,而是學習後以提升爲本身的知識與技能。code
輪子有過測試,但不免有失誤,若有錯誤處,還敬請指出;orm