java時間類Date、Calendar及用法

  對於時間類,這篇主要說明各類現實狀況下如何取值,怎麼定向取值,獲得本身想要的時間參數。在java中時間類主要有DateCalendar,暫時只介紹 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 類是一個抽象類,它爲特定瞬間與一組諸如 YEARMONTHDAY_OF_MONTHHOUR日曆字段之間的轉換提供了一些方法,併爲操做日曆字段(例如得到下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000,格里高利曆)的偏移量)。

  Calendar不得不說的就是類方法 getInstance,CalendargetInstance 方法返回一個 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)); 

    五、獲取兩個時間之間的時間差

    有時候須要獲取兩個時間的時間差,下面的方法主要用到了SimpleDateFormatMath兩個類,直接放代碼吧!

 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秒


 

  休息下班,明天繼續

  但願你們能積極發表本身的見解和建議,支持下哦

相關文章
相關標籤/搜索