閱讀320 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java中獲取前一天和後一天時間

https://blog.csdn.net/jiangwei0910410003/article/details/18978441


今天在開發項目的時候遇到一個問題就是怎麼獲取當前時間的前一天和後一天,這個實現的邏輯並不複雜,自己要寫的話的也不是難事,但是貌似感覺沒必要自己寫這樣的方法,想想Java中的Calendar類應該有這樣的方法,所以上網查了相關的資料,有兩個方法:分別是set和roll方法,這兩個方法的具體使用方法如下:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.java.demo;  
  2.   
  3. import java.util.Calendar;  
  4.   
  5. public class DateUtil {  
  6.       
  7.     public static void main(String[] args){  
  8.         //當前時間  
  9.         Calendar cl = setCalendar(2014,01,01);  
  10.         System.out.print("當前時間:");  
  11.         printCalendar(cl);  
  12.         //前一天  
  13.         cl = setCalendar(2014,01,01);  
  14.         getBeforeDay(cl);  
  15.         System.out.print("前一天:");  
  16.         printCalendar(cl);  
  17.         //後一天  
  18.         cl = setCalendar(2014,01,01);  
  19.         getAfterDay(cl);  
  20.         System.out.print("後一天:");  
  21.         printCalendar(cl);  
  22.     }  
  23.       
  24.     /** 
  25.      * 設置時間 
  26.      * @param year 
  27.      * @param month 
  28.      * @param date 
  29.      * @return 
  30.      */  
  31.     public static Calendar setCalendar(int year,int month,int date){  
  32.         Calendar cl = Calendar.getInstance();  
  33.         cl.set(year, month-1, date);  
  34.         return cl;  
  35.     }  
  36.       
  37.     /** 
  38.      * 獲取當前時間的前一天時間 
  39.      * @param cl 
  40.      * @return 
  41.      */  
  42.     private static Calendar getBeforeDay(Calendar cl){  
  43.         //使用roll方法進行向前回滾  
  44.         //cl.roll(Calendar.DATE, -1);  
  45.         //使用set方法直接進行設置  
  46.         int day = cl.get(Calendar.DATE);  
  47.         cl.set(Calendar.DATE, day-1);  
  48.         return cl;  
  49.     }  
  50.       
  51.     /** 
  52.      * 獲取當前時間的後一天時間 
  53.      * @param cl 
  54.      * @return 
  55.      */  
  56.     private static Calendar getAfterDay(Calendar cl){  
  57.         //使用roll方法進行回滾到後一天的時間  
  58.         //cl.roll(Calendar.DATE, 1);  
  59.         //使用set方法直接設置時間值  
  60.         int day = cl.get(Calendar.DATE);  
  61.         cl.set(Calendar.DATE, day+1);  
  62.         return cl;  
  63.     }  
  64.       
  65.     /** 
  66.      * 打印時間 
  67.      * @param cl 
  68.      */  
  69.     public static void printCalendar(Calendar cl){  
  70.         int year = cl.get(Calendar.YEAR);  
  71.         int month = cl.get(Calendar.MONTH)+1;  
  72.         int day = cl.get(Calendar.DATE);  
  73.         System.out.println(year+"-"+month+"-"+day);  
  74.     }  
  75.       
  76. }  
上麵的代碼就是說明了set方法和roll方法的使用,傳入一個Calendar,進行設置之後返回一個Calendar,但是roll和set有一個區別:為了測試出這兩個方法的卻別,我們將時間設置成一個邊界值:2014-01-01:看運行效果:

是通過set方法進行設置的時間的效果圖:


通過效果圖我們可以看到,set方法獲取前一天和後一天的時間是沒有任何問題的。下麵再來看一下roll方法獲取前一天和後一天的時間的效果圖:


我們發現在獲取前一天的時間的時候出現問題了,就是2014-01-01獲取前一天是2014-01-31,由此我們可以看到,roll方法在獲取前一天和後一天的時候並不是級聯改動的,隻會修改當前的day,而不會考慮year和month,當然他在修改day的時候是一個循環的修改,如:1月份是:1-31,就是一個循環。

通過上麵的分析我們看到了set方法和roll方法的卻別了。


最後更新:2017-04-03 12:55:00

  上一篇:go 設計模式六大原則---單一職責原則
  下一篇:go 為什麼詐騙短信看上去那麼弱智?