java(日期處理)

hyeveryone發表於2011-11-18
轉載自:http://whp0731.iteye.com/blog/352388 

 

java(日期處理)

 

第一部分關於JAVA的Date (參考關於JAVA的Date總結)

 

Java程式碼 複製程式碼 收藏程式碼
  1. 1.計算某一月份的最大天數    
  2.   
  3. Calendar time=Calendar.getInstance();    
  4. time.clear();    
  5. time.set(Calendar.YEAR,year); //year 為 int   
  6. time.set(Calendar.MONTH,i-1);//注意,Calendar物件預設一月為0             
  7. int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數   
  8. 注:在使用set方法之前,必須先clear一下,否則很多資訊會繼承自系統當前時間    
  9.   
  10. 2.Calendar和Date的轉化    
  11.   
  12. (1) Calendar轉化為Date    
  13. Calendar cal=Calendar.getInstance();    
  14. Date date=cal.getTime();    
  15.   
  16. (2) Date轉化為Calendar    
  17. Date date=new Date();    
  18. Calendar cal=Calendar.getInstance();    
  19. cal.setTime(date);    
  20.   
  21. 3.格式化輸出日期時間 (這個用的比較多)    
  22.   
  23. Date date=new Date();    
  24. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    
  25. String time=df.format(date);    
  26. System.out.println(time);    
  27.   
  28. 4.計算一年中的第幾星期    
  29.   
  30. (1)計算某一天是一年中的第幾星期    
  31. Calendar cal=Calendar.getInstance();    
  32. cal.set(Calendar.YEAR, 2006);    
  33. cal.set(Calendar.MONTH,;    
  34. cal.set(Calendar.DAY_OF_MONTH, 3);    
  35. int weekno=cal.get(Calendar.WEEK_OF_YEAR);    
  36.   
  37. (2)計算一年中的第幾星期是幾號    
  38. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");    
  39. Calendar cal=Calendar.getInstance();    
  40. cal.set(Calendar.YEAR, 2006);    
  41. cal.set(Calendar.WEEK_OF_YEAR, 1);    
  42. cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    
  43. System.out.println(df.format(cal.getTime()));    
  44. 輸出:    
  45. 2006-01-02    
  46.   
  47. 5.add()和roll()的用法(不太常用)    
  48.   
  49. (1)add()方法    
  50. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");    
  51. Calendar cal=Calendar.getInstance();    
  52. cal.set(Calendar.YEAR, 2006);    
  53. cal.set(Calendar.MONTH,;    
  54. cal.set(Calendar.DAY_OF_MONTH, 3);    
  55. cal.add(Calendar.DATE, -4);    
  56. Date date=cal.getTime();    
  57. System.out.println(df.format(date));    
  58. cal.add(Calendar.DATE, 4);    
  59. date=cal.getTime();    
  60. System.out.println(df.format(date));    
  61. 輸出:    
  62.     2006-08-30    
  63.     2006-09-03    
  64. (2)roll方法    
  65. cal.set(Calendar.YEAR, 2006);    
  66. cal.set(Calendar.MONTH,;    
  67. cal.set(Calendar.DAY_OF_MONTH, 3);    
  68. cal.roll(Calendar.DATE, -4);    
  69. date=cal.getTime();    
  70. System.out.println(df.format(date));    
  71. cal.roll(Calendar.DATE, 4);    
  72. date=cal.getTime();    
  73. System.out.println(df.format(date));    
  74.   
  75.   
  76. 輸出:    
  77.     2006-09-29    
  78.     2006-09-03    
  79. 可見,roll()方法在本月內迴圈,一般使用add()方法;    
  80.   
  81. 6.計算兩個任意時間中間的間隔天數(這個比較常用)    
  82. (1)傳進Calendar物件    
  83.     public int getIntervalDays(Calendar startday,Calendar endday)...{          
  84.         if(startday.after(endday))...{    
  85.             Calendar cal=startday;    
  86.             startday=endday;    
  87.             endday=cal;    
  88.         }       
  89.         long sl=startday.getTimeInMillis();    
  90.         long el=endday.getTimeInMillis();    
  91.           
  92.         long ei=el-sl;              
  93.         return (int)(ei/(1000*60*60*24));    
  94.     }    
  95. (2)傳進Date物件    
  96.   
  97.     public int getIntervalDays(Date startday,Date endday)...{           
  98.         if(startday.after(endday))...{    
  99.             Date cal=startday;    
  100.             startday=endday;    
  101.             endday=cal;    
  102.         }           
  103.         long sl=startday.getTime();    
  104.         long el=endday.getTime();          
  105.         long ei=el-sl;              
  106.         return (int)(ei/(1000*60*60*24));    
  107.     }    
  108. (3)改進精確計算相隔天數的方法    
  109.     public int getDaysBetween (Calendar d1,Calendar d2) ...{    
  110.         if (d1.after(d2)) ...{    
  111.             java.util.Calendar swap = d1;    
  112.             d1 = d2;    
  113.             d2 = swap;    
  114.         }    
  115.         int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);    
  116.         int y2 = d2.get(Calendar.YEAR);    
  117.         if (d1.get(Calendar.YEAR) != y2) ...{    
  118.             d1 = (Calendar) d1.clone();    
  119.             do ...{    
  120.                 days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數   
  121.                 d1.add(Calendar.YEAR, 1);    
  122.             } while (d1.get(Calendar.YEAR) != y2);    
  123.         }    
  124.         return days;    
  125.     }    
  126. 注意:通過上面的方法可以衍生出求任何時間,如要查出郵箱三週之內收到的郵件(得到當前系統時間-再得到三週前時間)用收件的時間去匹配 最好裝化成 long去比較    
  127. 如:1年前日期(注意毫秒的轉換)    
  128.    java.util.Date myDate=new java.util.Date();    
  129.    long myTime=(myDate.getTime()/1000)-60*60*24*365;    
  130.    myDate.setTime(myTime*1000);    
  131.    String mDate=formatter.format(myDate);    
  132.   
  133. 7. String 和 Date ,Long 之間相互轉換 (最常用)    
  134.   
  135. 字串轉化成時間型別(字串可以是任意型別,只要和SimpleDateFormat中的格式一致即可)    
  136. 通常我們取時間跨度的時候,會substring出具體時間--long-比較    
  137.   
  138. java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);    
  139. java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");    
  140. long dvalue=d.getTime();    
  141. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
  142. String mDateTime1=formatter.format(d);    
  143.   
  144. 8. 通過時間求時間    
  145.   
  146. 年月周求日期    
  147. >SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");    
  148. java.util.Date date2= formatter2.parse("2003-05 5 星期五");    
  149. SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");    
  150. String mydate2=formatter3.format(date2);    
  151.   
  152. 求是星期幾    
  153. mydate= myFormatter.parse("2001-1-1");    
  154. SimpleDateFormat formatter4 = new SimpleDateFormat("E");    
  155. String mydate3=formatter4.format(mydate);    
  156.   
  157. 9. java 和 具體的資料庫結合    
  158.   
  159. 在開發web應用中,針對不同的資料庫日期型別,我們需要在我們的程式中對日期型別做各種不同的轉換。若對應資料庫資料是oracle的Date型別,即只需要年月日的,可以選擇使用java.sql.Date型別,若對應的是MSsqlserver 資料庫的DateTime型別,即需要年月日時分秒的,選擇java.sql.Timestamp型別    
  160. 你可以使用dateFormat定義時間日期的格式,轉一個字串即可    
  161.   
  162. class Datetest{    
  163. *method 將字串型別的日期轉換為一個timestamp(時間戳記java.sql.Timestamp)    
  164. *@param dateString 需要轉換為timestamp的字串    
  165. *@return dataTime timestamp    
  166.   
  167. public final static java.sql.Timestamp string2Time(String dateString)    
  168. throws java.text.ParseException {    
  169. DateFormat dateFormat;    
  170. dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//設定格式   
  171. //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);   
  172. dateFormat.setLenient(false);    
  173. java.util.Date timeDate = dateFormat.parse(dateString);//util型別   
  174. java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp型別,timeDate.getTime()返回一個long型   
  175. return dateTime;    
  176. }    
  177.   
  178. *method 將字串型別的日期轉換為一個Date(java.sql.Date)    
  179. *@param dateString 需要轉換為Date的字串    
  180. *@return dataTime Date    
  181.   
  182. public final static java.sql.Date string2Date(String dateString)    
  183. throws java.lang.Exception {    
  184. DateFormat dateFormat;    
  185. dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);    
  186. dateFormat.setLenient(false);    
  187. java.util.Date timeDate = dateFormat.parse(dateString);//util型別   
  188. java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql型別   
  189. return dateTime;    
  190. }    
  191.   
  192. public static void main(String[] args){    
  193. Date da = new Date();    
  194. 注意:這個地方da.getTime()得到的是一個long型的值    
  195. System.out.println(da.getTime());    
  196.   
  197. 由日期date轉換為timestamp    
  198.   
  199. 第一種方法:使用new Timestamp(long)    
  200. Timestamp t = new Timestamp(new Date().getTime());    
  201. />System.out.println(t);    
  202.   
  203. 第二種方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)    
  204. Timestamp tt = new Timestamp(Calendar.getInstance().get(    
  205.       Calendar.YEAR) - 1900, Calendar.getInstance().get(    
  206.       Calendar.MONTH), Calendar.getInstance().get(    
  207.       Calendar.DATE), Calendar.getInstance().get(    
  208.       Calendar.HOUR), Calendar.getInstance().get(    
  209.       Calendar.MINUTE), Calendar.getInstance().get(    
  210.       Calendar.SECOND), 0);    
  211. System.out.println(tt);    
  212.   
  213. try {    
  214. String sToDate = "2005-8-18";//用於轉換成java.sql.Date的字串   
  215.       String sToTimestamp = "2005-8-18 14:21:12.123";//用於轉換成java.sql.Timestamp的字串   
  216.       Date date1 = string2Date(sToDate);    
  217.       Timestamp date2 = string2Time(sToTimestamp);    
  218. System.out.println("Date:"+date1.toString());//結果顯示   
  219. System.out.println("Timestamp:"+date2.toString());//結果顯示   
  220. }catch(Exception e) {    
  221. e.printStackTrace();    
  222. }    
  223. }    
  224. }   
1.計算某一月份的最大天數 

Calendar time=Calendar.getInstance(); 
time.clear(); 
time.set(Calendar.YEAR,year); //year 為 int 
time.set(Calendar.MONTH,i-1);//注意,Calendar物件預設一月為0           
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數 
注:在使用set方法之前,必須先clear一下,否則很多資訊會繼承自系統當前時間 

2.Calendar和Date的轉化 

(1) Calendar轉化為Date 
Calendar cal=Calendar.getInstance(); 
Date date=cal.getTime(); 

(2) Date轉化為Calendar 
Date date=new Date(); 
Calendar cal=Calendar.getInstance(); 
cal.setTime(date); 

3.格式化輸出日期時間 (這個用的比較多) 

Date date=new Date(); 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
String time=df.format(date); 
System.out.println(time); 

4.計算一年中的第幾星期 

(1)計算某一天是一年中的第幾星期 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH,; 
cal.set(Calendar.DAY_OF_MONTH, 3); 
int weekno=cal.get(Calendar.WEEK_OF_YEAR); 

(2)計算一年中的第幾星期是幾號 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.WEEK_OF_YEAR, 1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(df.format(cal.getTime())); 
輸出: 
2006-01-02 

5.add()和roll()的用法(不太常用) 

(1)add()方法 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH,; 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.add(Calendar.DATE, -4); 
Date date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.add(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
輸出: 
    2006-08-30 
    2006-09-03 
(2)roll方法 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH,; 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.roll(Calendar.DATE, -4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.roll(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 


輸出: 
    2006-09-29 
    2006-09-03 
可見,roll()方法在本月內迴圈,一般使用add()方法; 

6.計算兩個任意時間中間的間隔天數(這個比較常用) 
(1)傳進Calendar物件 
    public int getIntervalDays(Calendar startday,Calendar endday)...{       
        if(startday.after(endday))...{ 
            Calendar cal=startday; 
            startday=endday; 
            endday=cal; 
        }    
        long sl=startday.getTimeInMillis(); 
        long el=endday.getTimeInMillis(); 
       
        long ei=el-sl;           
        return (int)(ei/(1000*60*60*24)); 
    } 
(2)傳進Date物件 

    public int getIntervalDays(Date startday,Date endday)...{        
        if(startday.after(endday))...{ 
            Date cal=startday; 
            startday=endday; 
            endday=cal; 
        }        
        long sl=startday.getTime(); 
        long el=endday.getTime();       
        long ei=el-sl;           
        return (int)(ei/(1000*60*60*24)); 
    } 
(3)改進精確計算相隔天數的方法 
    public int getDaysBetween (Calendar d1,Calendar d2) ...{ 
        if (d1.after(d2)) ...{ 
            java.util.Calendar swap = d1; 
            d1 = d2; 
            d2 = swap; 
        } 
        int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); 
        int y2 = d2.get(Calendar.YEAR); 
        if (d1.get(Calendar.YEAR) != y2) ...{ 
            d1 = (Calendar) d1.clone(); 
            do ...{ 
                days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數 
                d1.add(Calendar.YEAR, 1); 
            } while (d1.get(Calendar.YEAR) != y2); 
        } 
        return days; 
    } 
注意:通過上面的方法可以衍生出求任何時間,如要查出郵箱三週之內收到的郵件(得到當前系統時間-再得到三週前時間)用收件的時間去匹配 最好裝化成 long去比較 
如:1年前日期(注意毫秒的轉換) 
   java.util.Date myDate=new java.util.Date(); 
   long myTime=(myDate.getTime()/1000)-60*60*24*365; 
   myDate.setTime(myTime*1000); 
   String mDate=formatter.format(myDate); 

7. String 和 Date ,Long 之間相互轉換 (最常用) 

字串轉化成時間型別(字串可以是任意型別,只要和SimpleDateFormat中的格式一致即可) 
通常我們取時間跨度的時候,會substring出具體時間--long-比較 

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US); 
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM"); 
long dvalue=d.getTime(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String mDateTime1=formatter.format(d); 

8. 通過時間求時間 

年月周求日期 
>SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E"); 
java.util.Date date2= formatter2.parse("2003-05 5 星期五"); 
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd"); 
String mydate2=formatter3.format(date2); 

求是星期幾 
mydate= myFormatter.parse("2001-1-1"); 
SimpleDateFormat formatter4 = new SimpleDateFormat("E"); 
String mydate3=formatter4.format(mydate); 

9. java 和 具體的資料庫結合 

在開發web應用中,針對不同的資料庫日期型別,我們需要在我們的程式中對日期型別做各種不同的轉換。若對應資料庫資料是oracle的Date型別,即只需要年月日的,可以選擇使用java.sql.Date型別,若對應的是MSsqlserver 資料庫的DateTime型別,即需要年月日時分秒的,選擇java.sql.Timestamp型別 
你可以使用dateFormat定義時間日期的格式,轉一個字串即可 

class Datetest{ 
*method 將字串型別的日期轉換為一個timestamp(時間戳記java.sql.Timestamp) 
*@param dateString 需要轉換為timestamp的字串 
*@return dataTime timestamp 

public final static java.sql.Timestamp string2Time(String dateString) 
throws java.text.ParseException { 
DateFormat dateFormat; 
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//設定格式 
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH); 
dateFormat.setLenient(false); 
java.util.Date timeDate = dateFormat.parse(dateString);//util型別 
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp型別,timeDate.getTime()返回一個long型 
return dateTime; 
} 

*method 將字串型別的日期轉換為一個Date(java.sql.Date) 
*@param dateString 需要轉換為Date的字串 
*@return dataTime Date 

public final static java.sql.Date string2Date(String dateString) 
throws java.lang.Exception { 
DateFormat dateFormat; 
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 
dateFormat.setLenient(false); 
java.util.Date timeDate = dateFormat.parse(dateString);//util型別 
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql型別 
return dateTime; 
} 

public static void main(String[] args){ 
Date da = new Date(); 
注意:這個地方da.getTime()得到的是一個long型的值 
System.out.println(da.getTime()); 

由日期date轉換為timestamp 

第一種方法:使用new Timestamp(long) 
Timestamp t = new Timestamp(new Date().getTime()); 
/>System.out.println(t); 

第二種方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano) 
Timestamp tt = new Timestamp(Calendar.getInstance().get( 
      Calendar.YEAR) - 1900, Calendar.getInstance().get( 
      Calendar.MONTH), Calendar.getInstance().get( 
      Calendar.DATE), Calendar.getInstance().get( 
      Calendar.HOUR), Calendar.getInstance().get( 
      Calendar.MINUTE), Calendar.getInstance().get( 
      Calendar.SECOND), 0); 
System.out.println(tt); 

try { 
String sToDate = "2005-8-18";//用於轉換成java.sql.Date的字串 
      String sToTimestamp = "2005-8-18 14:21:12.123";//用於轉換成java.sql.Timestamp的字串 
      Date date1 = string2Date(sToDate); 
      Timestamp date2 = string2Time(sToTimestamp); 
System.out.println("Date:"+date1.toString());//結果顯示 
System.out.println("Timestamp:"+date2.toString());//結果顯示 
}catch(Exception e) { 
e.printStackTrace(); 
} 
} 
} 

 

第二部分Date工具類(參考一個總結好的很好的關於JAVA的Date工具類)

 

Java程式碼 複製程式碼 收藏程式碼
  1. <SPAN style="BACKGROUND-COLOR: #ffffff">public class DateUtil      
  2. {      
  3.     //預設顯示日期的格式      
  4.     public static final String DATAFORMAT_STR = "yyyy-MM-dd";      
  5.           
  6.     //預設顯示日期的格式      
  7.     public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM";      
  8.           
  9.     //預設顯示日期時間的格式      
  10.     public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss";      
  11.           
  12.     //預設顯示簡體中文日期的格式      
  13.     public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日";      
  14.           
  15.     //預設顯示簡體中文日期時間的格式      
  16.     public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH時mm分ss秒";      
  17.           
  18.     //預設顯示簡體中文日期時間的格式      
  19.     public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH時mm分";      
  20.           
  21.     private static DateFormat dateFormat = null;      
  22.           
  23.     private static DateFormat dateTimeFormat = null;      
  24.           
  25.     private static DateFormat zhcnDateFormat = null;      
  26.           
  27.     private static DateFormat zhcnDateTimeFormat = null;      
  28.     static     
  29.     {      
  30.         dateFormat = new SimpleDateFormat(DATAFORMAT_STR);      
  31.         dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR);      
  32.         zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR);      
  33.         zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR);      
  34.     }      
  35.           
  36.     private static DateFormat getDateFormat(String formatStr)      
  37.     {      
  38.         if (formatStr.equalsIgnoreCase(DATAFORMAT_STR))      
  39.         {      
  40.             return dateFormat;      
  41.         }      
  42.         else     
  43.             if (formatStr.equalsIgnoreCase(DATATIMEF_STR))      
  44.             {      
  45.                 return dateTimeFormat;      
  46.             }      
  47.             else     
  48.                 if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR))      
  49.                 {      
  50.                     return zhcnDateFormat;      
  51.                 }      
  52.                 else     
  53.                     if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR))      
  54.                     {      
  55.                         return zhcnDateTimeFormat;      
  56.                     }      
  57.                     else     
  58.                     {      
  59.                         return new SimpleDateFormat(formatStr);      
  60.                     }      
  61.     }      
  62.           
  63.     /**    
  64.      * 按照預設顯示日期時間的格式"yyyy-MM-dd HH:mm:ss",轉化dateTimeStr為Date型別   
  65.      * dateTimeStr必須是"yyyy-MM-dd HH:mm:ss"的形式    
  66.      * @param dateTimeStr    
  67.      * @return    
  68.      */     
  69.     public static Date getDate(String dateTimeStr)      
  70.     {      
  71.         return getDate(dateTimeStr, DATATIMEF_STR);      
  72.     }      
  73.           
  74.     /**    
  75.      * 按照預設formatStr的格式,轉化dateTimeStr為Date型別    
  76.      * dateTimeStr必須是formatStr的形式    
  77.      * @param dateTimeStr    
  78.      * @param formatStr    
  79.      * @return    
  80.      */     
  81.     public static Date getDate(String dateTimeStr, String formatStr)      
  82.     {      
  83.         try     
  84.         {      
  85.             if (dateTimeStr == null || dateTimeStr.equals(""))      
  86.             {      
  87.                 return null;      
  88.             }      
  89.             DateFormat sdf = getDateFormat(formatStr);      
  90.             java.util.Date d = sdf.parse(dateTimeStr);      
  91.             return d;      
  92.         }      
  93.         catch (ParseException e)      
  94.         {      
  95.             throw new RuntimeException(e);      
  96.         }      
  97.     }      
  98.           
  99.     /**    
  100.      * 將YYYYMMDD轉換成Date日期    
  101.      * @param date    
  102.      * @return    
  103.      * @throws BusinessException    
  104.      */     
  105.     public static Date transferDate(String date) throws Exception      
  106.     {      
  107.         if (date == null || date.length() < 1)      
  108.             return null;      
  109.               
  110.         if (date.length() != 8)      
  111.             throw new Exception("日期格式錯誤");      
  112.         String con = "-";      
  113.               
  114.         String yyyy = date.substring(04);      
  115.         String mm = date.substring(46);      
  116.         String dd = date.substring(68);      
  117.               
  118.         int month = Integer.parseInt(mm);      
  119.         int day = Integer.parseInt(dd);      
  120.         if (month < 1 || month > 12 || day < 1 || day > 31)      
  121.             throw new Exception("日期格式錯誤");      
  122.               
  123.         String str = yyyy + con + mm + con + dd;      
  124.         return DateUtil.getDate(str, DateUtil.DATAFORMAT_STR);      
  125.     }      
  126.           
  127.     /**    
  128.      * 將YYYY-MM-DD日期轉換成yyyymmdd格式字串    
  129.      * @param date    
  130.      * @return    
  131.      */     
  132.     public static String getYYYYMMDDDate(Date date)      
  133.     {      
  134.         if (date == null)      
  135.             return null;      
  136.         String yyyy = getYear(date) + "";      
  137.         String mm = getMonth(date) + "";      
  138.         String dd = getDay(date) + "";      
  139.               
  140.         mm = StringUtil.rightAlign(mm, 2"0");      
  141.         dd = StringUtil.rightAlign(dd, 2"0");      
  142.         return yyyy + mm + dd;      
  143.     }      
  144.           
  145.     /**    
  146.      * 將YYYY-MM-DD日期轉換成YYYYMMDDHHMMSS格式字串    
  147.      * @param date    
  148.      * @return    
  149.      */     
  150.     public static String getYYYYMMDDHHMMSSDate(Date date)      
  151.     {      
  152.         if (date == null)      
  153.             return null;      
  154.         String yyyy = getYear(date) + "";      
  155.         String mm = getMonth(date) + "";      
  156.         String dd = getDay(date) + "";      
  157.         String hh = getHour(date) + "";      
  158.         String min = getMin(date) + "";      
  159.         String ss = getSecond(date) + "";      
  160.               
  161.         mm = StringUtil.rightAlign(mm, 2"0");      
  162.         dd = StringUtil.rightAlign(dd, 2"0");      
  163.         hh = StringUtil.rightAlign(hh, 2"0");      
  164.         min = StringUtil.rightAlign(min, 2"0");      
  165.         ss = StringUtil.rightAlign(ss, 2"0");      
  166.               
  167.         return yyyy + mm + dd + hh + min + ss;      
  168.     }      
  169.           
  170.     /**    
  171.      * 將YYYY-MM-DD日期轉換成yyyymmdd格式字串    
  172.      * @param date    
  173.      * @return    
  174.      */     
  175.     public static String getYYYYMMDDDate(String date)      
  176.     {      
  177.         return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR));      
  178.     }      
  179.           
  180.     /**    
  181.      * 將Date轉換成字串“yyyy-mm-dd hh:mm:ss”的字串    
  182.      * @param date    
  183.      * @return    
  184.      */     
  185.     public static String dateToDateString(Date date)      
  186.     {      
  187.         return dateToDateString(date, DATATIMEF_STR);      
  188.     }      
  189.           
  190.     /**    
  191.      * 將Date轉換成formatStr格式的字串    
  192.      * @param date    
  193.      * @param formatStr    
  194.      * @return    
  195.      */     
  196.     public static String dateToDateString(Date date, String formatStr)      
  197.     {      
  198.         DateFormat df = getDateFormat(formatStr);      
  199.         return df.format(date);      
  200.     }      
  201.           
  202.     /**    
  203.      * 返回一個yyyy-MM-dd HH:mm:ss 形式的日期時間字串中的HH:mm:ss   
  204.      * @param dateTime    
  205.      * @return    
  206.      */     
  207.     public static String getTimeString(String dateTime)      
  208.     {      
  209.         return getTimeString(dateTime, DATATIMEF_STR);      
  210.     }      
  211.           
  212.     /**    
  213.      * 返回一個formatStr格式的日期時間字串中的HH:mm:ss    
  214.      * @param dateTime    
  215.      * @param formatStr    
  216.      * @return    
  217.      */     
  218.     public static String getTimeString(String dateTime, String formatStr)      
  219.     {      
  220.         Date d = getDate(dateTime, formatStr);      
  221.         String s = dateToDateString(d);      
  222.         return s.substring(DATATIMEF_STR.indexOf('H'));      
  223.     }      
  224.           
  225.     /**    
  226.      * 獲取當前日期yyyy-MM-dd的形式    
  227.      * @return    
  228.      */     
  229.     public static String getCurDate()      
  230.     {      
  231.         //return dateToDateString(new Date(),DATAFORMAT_STR);     
  232.         return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR);      
  233.     }      
  234.           
  235.     /**    
  236.      * 獲取當前日期yyyy年MM月dd日的形式    
  237.      * @return    
  238.      */     
  239.     public static String getCurZhCNDate()      
  240.     {      
  241.         return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR);      
  242.     }      
  243.           
  244.     /**    
  245.      * 獲取當前日期時間yyyy-MM-dd HH:mm:ss的形式    
  246.      * @return    
  247.      */     
  248.     public static String getCurDateTime()      
  249.     {      
  250.         return dateToDateString(new Date(), DATATIMEF_STR);      
  251.     }      
  252.           
  253.     /**    
  254.      * 獲取當前日期時間yyyy年MM月dd日HH時mm分ss秒的形式    
  255.      * @return    
  256.      */     
  257.     public static String getCurZhCNDateTime()      
  258.     {      
  259.         return dateToDateString(new Date(), ZHCN_DATATIMEF_STR);      
  260.     }      
  261.           
  262.     /**    
  263.      * 獲取日期d的days天后的一個Date    
  264.      * @param d    
  265.      * @param days    
  266.      * @return    
  267.      */     
  268.     public static Date getInternalDateByDay(Date d, int days)      
  269.     {      
  270.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  271.         now.setTime(d);      
  272.         now.add(Calendar.DATE, days);      
  273.         return now.getTime();      
  274.     }      
  275.           
  276.     public static Date getInternalDateByMon(Date d, int months)      
  277.     {      
  278.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  279.         now.setTime(d);      
  280.         now.add(Calendar.MONTH, months);      
  281.         return now.getTime();      
  282.     }      
  283.           
  284.     public static Date getInternalDateByYear(Date d, int years)      
  285.     {      
  286.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  287.         now.setTime(d);      
  288.         now.add(Calendar.YEAR, years);      
  289.         return now.getTime();      
  290.     }      
  291.           
  292.     public static Date getInternalDateBySec(Date d, int sec)      
  293.     {      
  294.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  295.         now.setTime(d);      
  296.         now.add(Calendar.SECOND, sec);      
  297.         return now.getTime();      
  298.     }      
  299.           
  300.     public static Date getInternalDateByMin(Date d, int min)      
  301.     {      
  302.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  303.         now.setTime(d);      
  304.         now.add(Calendar.MINUTE, min);      
  305.         return now.getTime();      
  306.     }      
  307.           
  308.     public static Date getInternalDateByHour(Date d, int hours)      
  309.     {      
  310.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  311.         now.setTime(d);      
  312.         now.add(Calendar.HOUR_OF_DAY, hours);      
  313.         return now.getTime();      
  314.     }      
  315.           
  316.     /**    
  317.      * 根據一個日期字串,返回日期格式,目前支援4種    
  318.      * 如果都不是,則返回null    
  319.      * @param DateString    
  320.      * @return    
  321.      */     
  322.     public static String getFormateStr(String DateString)      
  323.     {      
  324.         String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"//"yyyy-MM-dd"     
  325.         String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"//"yyyy-MM-dd HH:mm:ss";     
  326.         String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日"     
  327.         String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}時[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH時mm分ss秒"     
  328.               
  329.         Pattern p = Pattern.compile(patternStr1);      
  330.         Matcher m = p.matcher(DateString);      
  331.         boolean b = m.matches();      
  332.         if (b)      
  333.             return DATAFORMAT_STR;      
  334.         p = Pattern.compile(patternStr2);      
  335.         m = p.matcher(DateString);      
  336.         b = m.matches();      
  337.         if (b)      
  338.             return DATATIMEF_STR;      
  339.               
  340.         p = Pattern.compile(patternStr3);      
  341.         m = p.matcher(DateString);      
  342.         b = m.matches();      
  343.         if (b)      
  344.             return ZHCN_DATAFORMAT_STR;      
  345.               
  346.         p = Pattern.compile(patternStr4);      
  347.         m = p.matcher(DateString);      
  348.         b = m.matches();      
  349.         if (b)      
  350.             return ZHCN_DATATIMEF_STR;      
  351.         return null;      
  352.     }      
  353.           
  354.     /**    
  355.      * 將一個"yyyy-MM-dd HH:mm:ss"字串,轉換成"yyyy年MM月dd日HH時mm分ss秒"的字串   
  356.      * @param dateStr    
  357.      * @return    
  358.      */     
  359.     public static String getZhCNDateTime(String dateStr)      
  360.     {      
  361.         Date d = getDate(dateStr);      
  362.         return dateToDateString(d, ZHCN_DATATIMEF_STR);      
  363.     }      
  364.           
  365.     /**    
  366.      * 將一個"yyyy-MM-dd"字串,轉換成"yyyy年MM月dd日"的字串    
  367.      * @param dateStr    
  368.      * @return    
  369.      */     
  370.     public static String getZhCNDate(String dateStr)      
  371.     {      
  372.         Date d = getDate(dateStr, DATAFORMAT_STR);      
  373.         return dateToDateString(d, ZHCN_DATAFORMAT_STR);      
  374.     }      
  375.           
  376.     /**    
  377.      * 將dateStr從fmtFrom轉換到fmtTo的格式    
  378.      * @param dateStr    
  379.      * @param fmtFrom    
  380.      * @param fmtTo    
  381.      * @return    
  382.      */     
  383.     public static String getDateStr(String dateStr, String fmtFrom, String fmtTo)      
  384.     {      
  385.         Date d = getDate(dateStr, fmtFrom);      
  386.         return dateToDateString(d, fmtTo);      
  387.     }      
  388.           
  389.     /**    
  390.      * 比較兩個"yyyy-MM-dd HH:mm:ss"格式的日期,之間相差多少毫秒,time2-time1   
  391.      * @param time1    
  392.      * @param time2    
  393.      * @return    
  394.      */     
  395.     public static long compareDateStr(String time1, String time2)      
  396.     {      
  397.         Date d1 = getDate(time1);      
  398.         Date d2 = getDate(time2);      
  399.         return d2.getTime() - d1.getTime();      
  400.     }      
  401.           
  402.     /**    
  403.      * 將小時數換算成返回以毫秒為單位的時間    
  404.      * @param hours    
  405.      * @return    
  406.      */     
  407.     public static long getMicroSec(BigDecimal hours)      
  408.     {      
  409.         BigDecimal bd;      
  410.         bd = hours.multiply(new BigDecimal(3600 * 1000));      
  411.         return bd.longValue();      
  412.     }      
  413.           
  414.     /**    
  415.      * 獲取Date中的分鐘    
  416.      * @param d    
  417.      * @return    
  418.      */     
  419.     public static int getMin(Date d)      
  420.     {      
  421.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  422.         now.setTime(d);      
  423.         return now.get(Calendar.MINUTE);      
  424.     }      
  425.           
  426.     /**    
  427.      * 獲取Date中的小時(24小時)    
  428.      * @param d    
  429.      * @return    
  430.      */     
  431.     public static int getHour(Date d)      
  432.     {      
  433.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  434.         now.setTime(d);      
  435.         return now.get(Calendar.HOUR_OF_DAY);      
  436.     }      
  437.           
  438.     /**    
  439.      * 獲取Date中的秒    
  440.      * @param d    
  441.      * @return    
  442.      */     
  443.     public static int getSecond(Date d)      
  444.     {      
  445.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  446.         now.setTime(d);      
  447.         return now.get(Calendar.SECOND);      
  448.     }      
  449.           
  450.     /**    
  451.      * 獲取xxxx-xx-xx的日    
  452.      * @param d    
  453.      * @return    
  454.      */     
  455.     public static int getDay(Date d)      
  456.     {      
  457.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  458.         now.setTime(d);      
  459.         return now.get(Calendar.DAY_OF_MONTH);      
  460.     }      
  461.           
  462.     /**    
  463.      * 獲取月份,1-12月    
  464.      * @param d    
  465.      * @return    
  466.      */     
  467.     public static int getMonth(Date d)      
  468.     {      
  469.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  470.         now.setTime(d);      
  471.         return now.get(Calendar.MONTH) + 1;      
  472.     }      
  473.           
  474.     /**    
  475.      * 獲取19xx,20xx形式的年    
  476.      * @param d    
  477.      * @return    
  478.      */     
  479.     public static int getYear(Date d)      
  480.     {      
  481.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  482.         now.setTime(d);      
  483.         return now.get(Calendar.YEAR);      
  484.     }      
  485.           
  486.     /**    
  487.      * 得到d的上個月的年份+月份,如200505    
  488.      * @return    
  489.      */     
  490.     public static String getYearMonthOfLastMon(Date d)      
  491.     {      
  492.         Date newdate = getInternalDateByMon(d, -1);      
  493.         String year = String.valueOf(getYear(newdate));      
  494.         String month = String.valueOf(getMonth(newdate));      
  495.         return year + month;      
  496.     }      
  497.           
  498.     /**    
  499.      * 得到當前日期的年和月如200509    
  500.      * @return String    
  501.      */     
  502.     public static String getCurYearMonth()      
  503.     {      
  504.         Calendar now = Calendar.getInstance(TimeZone.getDefault());      
  505.         String DATE_FORMAT = "yyyyMM";      
  506.         java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);      
  507.         sdf.setTimeZone(TimeZone.getDefault());      
  508.         return (sdf.format(now.getTime()));      
  509.     }      
  510.           
  511.     public static Date getNextMonth(String year, String month)      
  512.     {      
  513.         String datestr = year + "-" + month + "-01";      
  514.         Date date = getDate(datestr, DATAFORMAT_STR);      
  515.         return getInternalDateByMon(date, 1);      
  516.     }      
  517.           
  518.     public static Date getLastMonth(String year, String month)      
  519.     {      
  520.         String datestr = year + "-" + month + "-01";      
  521.         Date date = getDate(datestr, DATAFORMAT_STR);      
  522.         return getInternalDateByMon(date, -1);      
  523.     }      
  524.           
  525.     /**    
  526.      * 得到日期d,按照頁面日期控制元件格式,如"2001-3-16"    
  527.      * @param d    
  528.      * @return    
  529.      */     
  530.     public static String getSingleNumDate(Date d)      
  531.     {      
  532.         return dateToDateString(d, DATAFORMAT_STR);      
  533.     }      
  534.           
  535.     /**    
  536.      * 得到d半年前的日期,"yyyy-MM-dd"    
  537.      * @param d    
  538.      * @return    
  539.      */     
  540.     public static String getHalfYearBeforeStr(Date d)      
  541.     {      
  542.         return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR);      
  543.     }      
  544.           
  545.     /**    
  546.      * 得到當前日期D的月底的前/後若干天的時間,<0表示之前,>0表示之後    
  547.      * @param d    
  548.      * @param days    
  549.      * @return    
  550.      */     
  551.     public static String getInternalDateByLastDay(Date d, int days)      
  552.     {      
  553.               
  554.         return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR);      
  555.     }      
  556.           
  557.     /**    
  558.      * 日期中的年月日相加    
  559.      *  @param field int  需要加的欄位  年 月 日    
  560.      * @param amount int 加多少    
  561.      * @return String    
  562.      */     
  563.     public static String addDate(int field, int amount)      
  564.     {      
  565.         int temp = 0;      
  566.         if (field == 1)      
  567.         {      
  568.             temp = Calendar.YEAR;      
  569.         }      
  570.         if (field == 2)      
  571.         {      
  572.             temp = Calendar.MONTH;      
  573.         }      
  574.         if (field == 3)      
  575.         {      
  576.             temp = Calendar.DATE;      
  577.         }      
  578.               
  579.         String Time = "";      
  580.         try     
  581.         {      
  582.             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");      
  583.             Calendar cal = Calendar.getInstance(TimeZone.getDefault());      
  584.             cal.add(temp, amount);      
  585.             Time = sdf.format(cal.getTime());      
  586.             return Time;      
  587.         }      
  588.         catch (Exception e)      
  589.         {      
  590.             e.printStackTrace();      
  591.             return null;      
  592.         }      
  593.               
  594.     }      
  595.           
  596.     /**    
  597.      * 獲得系統當前月份的天數    
  598.      * @return    
  599.      */     
  600.     public static int getCurentMonthDay()      
  601.     {      
  602.         Date date = Calendar.getInstance().getTime();      
  603.         return getMonthDay(date);      
  604.     }      
  605.           
  606.     /**    
  607.      * 獲得指定日期月份的天數    
  608.      * @return    
  609.      */     
  610.     public static int getMonthDay(Date date)      
  611.     {      
  612.         Calendar c = Calendar.getInstance();      
  613.         c.setTime(date);      
  614.         return c.getActualMaximum(Calendar.DAY_OF_MONTH);      
  615.               
  616.     }      
  617.           
  618.     /**    
  619.      * 獲得指定日期月份的天數  yyyy-mm-dd    
  620.      * @return    
  621.      */     
  622.     public static int getMonthDay(String date)      
  623.     {      
  624.         Date strDate = getDate(date, DATAFORMAT_STR);      
  625.         return getMonthDay(strDate);      
  626.               
  627.     }      
  628.           
  629.     public static String getStringDate(Calendar cal)      
  630.     {      
  631.               
  632.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");      
  633.         return format.format(cal.getTime());      
  634.     }      
  635.           
  636.     /**    
  637.      * @param args    
  638.      */     
  639.     public static void main(String[] args)      
  640.     {      
  641.         //      //System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss"));     
  642.         //      System.out.print("\n"+DateUtil.getCurZhCNDateTime());     
  643.         //      System.out.print("\n"+getFormateStr(DateUtil.getCurDate()));     
  644.         //      System.out.print("\n"+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3"));     
  645.         //      System.out.print("\n"+getDay(new Date()));     
  646.         //      System.out.print("\n"+getMonth(new Date()));     
  647.         //      System.out.print("\n"+getYear(new Date()));     
  648.         //      System.out.print("\n"+getMin(new Date()));     
  649.         ////        System.out.print("\n"+new Date().getSeconds());     
  650.         /*Date d1 = new Date(2007,11,30);   
  651.         Date d2 = new Date(2007,12,1);    
  652.         if(d2.compareTo(d1)>0){    
  653.             System.out.println("d2大於d1");    
  654.         }else{    
  655.             System.out.println("d2小於d1");    
  656.         }*/     
  657.      
  658.         System.out.println(addDate(11));      
  659.         System.out.println(addDate(21));      
  660.         System.out.println(addDate(31));      
  661.               
  662.         System.out.println(getYYYYMMDDHHMMSSDate(new Date()));      
  663.               
  664.         System.out.println(getCurentMonthDay());      
  665.               
  666.     }      
  667.           
  668. }     
  669. </SPAN>  

相關文章