對於時間類,這篇主要說明各類現實狀況下如何取值,怎麼定向取值,獲得本身想要的時間參數。在java中時間類主要有Date、Calendar,暫時只介紹 java.util.*下的時間類,對於java.sql.*下的先不作介紹,之後在另一篇進行補充,這篇主要內容有如下幾個。java
一、如何獲取當前時間參數sql
二、如何過去某一個月第一天和最後一天 測試
三、如何獲取當日日期,當月月份,當年年份spa
四、如何加減日期code
五、獲取兩個時間之間的時間差orm
首先,咱們須要瞭解API下對其的介紹,讓在使用的時候明白爲何這麼寫?而不是簡單的複製粘貼應付差事。對象
對於Date,不少方法已通過時遷移到了Calendar類上,可是這是最初的時間類,構造方法主要介紹兩種即blog
Date date= new Date();//分配對象並初始話get
Date date= new Date(long date)//分配
Date
對象並初始化此對象,以表示自從標準基準時間(稱爲「曆元(epoch)」,即 1970 年 1 月 1 日00:00:00 GMT)以來的指定毫秒數。
博客
能夠看得出來,Date是以曆元爲標準的,簡單的驗證下你的猜測。new Date().getYear() 的值是 117 然而今年是 2017 。
對於Calendar,與Date不一樣的是,他對Date的時間曆元進行偏移,要是看括號裏的有點暈可不看。API(Calendar
類是一個抽象類,它爲特定瞬間與一組諸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日曆字段
之間的轉換提供了一些方法,併爲操做日曆字段(例如得到下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000,格里高利曆)的偏移量)。
Calendar不得不說的就是類方法 getInstance,
Calendar
的 getInstance
方法返回一個 Calendar
對象,其日曆字段已由當前日期和時間初始化:這個方法你必需要知道,否則你玩什麼Calendar呢是否是?
Calendar rightNow = Calendar.getInstance();
好了下面咱們介紹各類現實須要處理的,也確定是你進入博客要找的。
在介紹如下的內容前,咱們先說明下也不得不說的一個類SimpleDateFormat,其屬於java.text.*下,SimpleDateFormat 是一個以語言環境有關的方式來格式化和解析日期的具體類,它容許進行格式化(日期-->文本)、解析(文本-->日期)和規範化。下面不少方法都出現了這個類的應運,簡單說一下掃除心中的疑惑,抽空能夠看一下API。
一、如何過去當錢時間參數。按yyyy-MM-dd hh:mm:ss 、yyyy-MM-dd、yyyy-MM-dd hh:mm 、yyyyMMdd等等各類狀況,這個大家須要什麼本身改代碼。
1 public static String getCurrentTime() { 2 Date NowDate = new Date(); 3 SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 4 CurrentTime = formatter.format(NowDate); 5 return CurrentTime; 6 }
二、如何獲取某一個月的第一天和最後一天。
第一天確定容易,最後一天其實也很容易,主要用到了Calendar和SimpleDateFormat兩個類,須要注意的是月份按0---11總共十二個月,不是從1開始的,可是一個月幾號第幾天倒是從1開始的,如下是對兩個方法進行的封裝。
1 public static String getLastDayOfMonth(int year, int month) { 2 Calendar cal = Calendar.getInstance(); 3 cal.set(Calendar.YEAR, year); 4 cal.set(Calendar.MONTH, month); 5 cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE)); 6 return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime()); 7 } 8 public static String getFirstDayOfMonth(int year, int month) { 9 Calendar cal = Calendar.getInstance(); 10 cal.set(Calendar.YEAR, year); 11 cal.set(Calendar.MONTH, month); 12 cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); 13 return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime()); 14 }
三、如何獲取當月月份,當年年份,當前日期?較爲簡單不作測試。在這個方法上你能夠測試下當傳yyyy-MM-dd等等各類參數,變通應用獲取時間參,好比獲取2017-0九、20170九、2017-09-2二、20170922等等各類數據,有興趣的話本身進行測試下驗證下本身的想法。
1 /** 2 * @param type類型 3 * dd 日 MM 月 yyyy 年 按須要進行傳參 4 * @return 5 */ 6 public static String getCurrentDay(String type) { 7 java.util.Date NowDate = new java.util.Date(); 8 SimpleDateFormat formatter = new SimpleDateFormat(type); 9 return formatter.format(NowDate); 10 }
四、如何加減日期?Calendar類中提供了add方法,按須要進行操做想要的結果哦!
這裏簡單的介紹下add方法,即add(f, delta)將
delta
添加到 f
字段中,主要有兩個規則:
Add 規則 1。調用後
f
字段的值減去調用前f
字段的值等於delta
,以字段f
中發生的任何溢出爲模。溢出發生在字段值超出其範圍時,結果,下一個更大的字段會遞增或遞減,並將字段值調整回其範圍內。Add 規則 2。若是指望某一個更小的字段是不變的,但讓它等於之前的值是不可能的,由於在字段
f
發生更改以後,或者在出現其餘約束以後,好比時區偏移量發生更改,它的最大值和最小值也在發生更改,而後它的值被調整爲儘可能接近於所指望的值。更小的字段表示一個更小的時間單元。HOUR
是一個比DAY_OF_MONTH
小的字段。對於不指望是不變字段的更小字段,無需進行任何調整。日曆系統會肯定指望不變的那些字段。
廢話太多直接弄代碼!給個標記,如今的時間是2017-09-21,須要注意的是 向後推一天是 +1 向前是 -1,下面代碼的測試結果爲2017-09-22
1 Calendar c = Calendar.getInstance(); 2 c.add(Calendar.DAY_OF_MONTH, +1); 3 Date d = c.getTime(); 4 System.out.println(new SimpleDateFormat( "yyyy-MM-dd ").format(d));
五、獲取兩個時間之間的時間差
有時候須要獲取兩個時間的時間差,下面的方法主要用到了SimpleDateFormat、Math兩個類,直接放代碼吧!
1 /** 2 * 獲取時間差 3 * @param time1 time2 須要計算的時間 4 * @return 5 */ 6 public static String getTimeDeffer(String time1,String time2) 7 { 8 String result = ""; 9 if(StringUtils.isNotBlank(time1)&&StringUtils.isNotBlank(time2)){ 10 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 11 try { 12 long dt1 = sdf.parse( time1 ).getTime(); 13 long dt2 = sdf.parse( time2 ).getTime(); 14 long dc = Math.abs(dt2-dt1); 16 long seconds = dc/1000; 17 long date = seconds/(24*60*60); //相差的天數 18 long hour = (seconds-date*24*60*60)/(60*60);//相差的小時數 19 long minut = (seconds-date*24*60*60-hour*60*60)/(60);//相差的分鐘數 20 long second = (seconds-date*24*60*60-hour*60*60-minut*60);//相差的秒數 21 return (date==0?"":(date+"天"))+(hour==0?"":(hour+"小時"))+(minut==0?"":(minut+"分"))+(second==0?"":(second+"秒")); 22 } catch (ParseException e) { 23 e.printStackTrace(); 24 } 25 } 26 return result; 27 }
這裏咱們簡單的測試下,就不放圖了,簡單的說一下,例如:
System.out.println(getTimeDeffer("2015-10-21 10:48:22","2015-10-27 22:48:23"));
結果是:6天12小時1秒
休息下班,明天繼續
但願你們能積極發表本身的見解和建議,支持下哦