web开发中公用组件的开发之一---------DateUtils

转http://www.iteye.com/topic/432172

在web应用中我们经常要到用到对日期的操作
已经有很多的开源代码供选择,例如apache 就有
不是太复杂就是不太适合中国国情的,反正项目中很少用到apache的公用组件包

下面是我在web开发中常用的些方法操作
现简单列举出来,已示记念。

Java 代码
  1. package  com.chinadim.test.utils;  
  2.   
  3. import  java.text.ParsePosition;  
  4. import  java.text.SimpleDateFormat;  
  5. import  java.util.Calendar;  
  6. import  java.util.Date;  
  7.   
  8.   
  9. /**  
  10.  * xxxxx  
  11.  * xxxxxx  
  12.  */   
  13. public   class  DateUtils {  
  14.       
  15.     /**  
  16.      * 静 态常量  
  17.      */   
  18.     public   static   final  String C_TIME_PATTON_DEFAULT =  "yyyy-MM-dd HH:mm:ss" ;  
  19.     public   static   final  String C_DATE_PATTON_DEFAULT =  "yyyy-MM-dd" ;  
  20.       
  21.     public   static   final   int  C_ONE_SECOND =  1000 ;  
  22.     public   static   final   int  C_ONE_MINUTE =  60  * C_ONE_SECOND;  
  23.     public   static   final   long  C_ONE_HOUR =  60  * C_ONE_MINUTE;  
  24.     public   static   final   long  C_ONE_DAY =  24  * C_ONE_HOUR;  
  25.       
  26.     /**  
  27.      * 计 算当前月份的最大天数  
  28.      * @return  
  29.      */   
  30.     public   static   int  findMaxDayInMonth() {  
  31.         return  findMaxDayInMonth( 00 );  
  32.     }  
  33.       
  34.     /**  
  35.      * 计 算指定日期月份的最大天数  
  36.      * @param date  
  37.      * @return  
  38.      */   
  39.     public   static   int  findMaxDayInMonth(Date date) {  
  40.         if  (date ==  null ) {  
  41.             return   0 ;  
  42.         }  
  43.         return  findMaxDayInMonth(date2Calendar(date));  
  44.     }  
  45.       
  46.     /**  
  47.      * 计 算指定日历月份的最大天数  
  48.      * @param calendar  
  49.      * @return  
  50.      */   
  51.     public   static   int  findMaxDayInMonth(Calendar calendar) {  
  52.         if  (calendar ==  null ) {  
  53.             return   0 ;  
  54.         }  
  55.           
  56.         return  calendar.getActualMaximum(Calendar.DAY_OF_MONTH);  
  57.     }  
  58.       
  59.     /**  
  60.      * 计 算当前年某月份的最大天数  
  61.      * @param month  
  62.      * @return  
  63.      */   
  64.     public   static   int  findMaxDayInMonth( int  month) {  
  65.         return  findMaxDayInMonth( 0 , month);  
  66.     }  
  67.       
  68.     /**  
  69.      * 计 算某年某月份的最大天数  
  70.      * @param year  
  71.      * @param month  
  72.      * @return  
  73.      */   
  74.     public   static   int  findMaxDayInMonth( int  year,  int  month) {  
  75.         Calendar calendar = Calendar.getInstance();  
  76.         if  (year >  0 ) {  
  77.             calendar.set(Calendar.YEAR, year);  
  78.         }  
  79.           
  80.         if  (month >  0 ) {  
  81.             calendar.set(Calendar.MONTH, month - 1 );  
  82.         }  
  83.           
  84.         return  findMaxDayInMonth(calendar);  
  85.     }  
  86.       
  87.     /**  
  88.      * Calendar 转 换为 Date  
  89.      * @param calendar  
  90.      * @return  
  91.      */   
  92.     public   static  Date calendar2Date(Calendar calendar) {  
  93.         if  (calendar ==  null ) {  
  94.             return   null ;  
  95.         }  
  96.         return  calendar.getTime();  
  97.     }  
  98.       
  99.     /**  
  100.      * Date 转 换为 Calendar  
  101.      * @param date  
  102.      * @return  
  103.      */   
  104.     public   static  Calendar date2Calendar(Date date) {  
  105.         if  (date ==  null ) {  
  106.             return   null ;  
  107.         }  
  108.         Calendar calendar = Calendar.getInstance();  
  109.         calendar.setTime(date);  
  110.         return  calendar;  
  111.     }  
  112.       
  113.     /**  
  114.      * 拿 到默认格式的SimpleDateFormat  
  115.      * @return  
  116.      */   
  117.     public   static  SimpleDateFormat getSimpleDateFormat() {  
  118.         return  getSimpleDateFormat( null );  
  119.     }  
  120.       
  121.     /**  
  122.      * 拿 到指定输出格式的SimpleDateFormat  
  123.      * @param format  
  124.      * @return  
  125.      */   
  126.     public   static  SimpleDateFormat getSimpleDateFormat(String format) {  
  127.         SimpleDateFormat sdf;  
  128.         if  (format ==  null ) {  
  129.             sdf = new  SimpleDateFormat(C_TIME_PATTON_DEFAULT);  
  130.         } else  {  
  131.             sdf = new  SimpleDateFormat(format);  
  132.         }  
  133.           
  134.         return  sdf;  
  135.     }  
  136.       
  137.     /**  
  138.      * 转 换当前时间为默认格式  
  139.      * @return  
  140.      */   
  141.     public   static  String formatDate2Str() {  
  142.         return  formatDate2Str( new  Date());  
  143.     }  
  144.       
  145.     /**  
  146.      * 转 换指定时间为默认格式  
  147.      * @param date  
  148.      * @return  
  149.      */   
  150.     public    static  String formatDate2Str(Date date) {  
  151.         return  formatDate2Str(date, C_TIME_PATTON_DEFAULT);  
  152.     }  
  153.       
  154.     /**  
  155.      * 转 换指定时间为指定格式  
  156.      * @param date  
  157.      * @param format  
  158.      * @return  
  159.      */   
  160.     public   static  String formatDate2Str(Date date, String format) {  
  161.         if  (date ==  null ) {  
  162.             return   null ;  
  163.         }  
  164.           
  165.         if  (format ==  null  || format.equals( "" )) {  
  166.             format = C_TIME_PATTON_DEFAULT;  
  167.         }  
  168.         SimpleDateFormat sdf = getSimpleDateFormat(format);  
  169.         return  sdf.format(date);  
  170.     }  
  171.       
  172.     /**  
  173.      * 转 换默认格式的时间为Date  
  174.      * @param dateStr  
  175.      * @return  
  176.      */   
  177.     public   static  Date formatStr2Date(String dateStr) {  
  178.         return  formatStr2Date(dateStr,  null );  
  179.     }  
  180.       
  181.     /**  
  182.      * 转 换指定格式的时间为Date  
  183.      * @param dateStr  
  184.      * @param format  
  185.      * @return  
  186.      */   
  187.     public   static  Date formatStr2Date(String dateStr, String format) {  
  188.         if  (dateStr ==  null ) {  
  189.             return   null ;  
  190.         }  
  191.           
  192.         if  (format ==  null  || format.equals( "" )) {  
  193.             format = C_TIME_PATTON_DEFAULT;  
  194.         }  
  195.         SimpleDateFormat sdf = getSimpleDateFormat(format);  
  196.         return  sdf.parse(dateStr,  new  ParsePosition( 0 ));  
  197.     }  
  198.       
  199.     /**  
  200.      * 转 换默认格式的时间为指定格式时间  
  201.      * @param dateStr  
  202.      * @param defineFormat  
  203.      * @return  
  204.      */   
  205.     public   static  String formatDefault2Define(String dateStr, String defineFormat) {  
  206.         return  formatSource2Target(dateStr, C_TIME_PATTON_DEFAULT, defineFormat);  
  207.     }  
  208.       
  209.     /**  
  210.      * 转 换源格式的时间为目标格式时间  
  211.      * @param dateStr  
  212.      * @param sourceFormat  
  213.      * @param targetFormat  
  214.      * @return  
  215.      */   
  216.     public   static  String formatSource2Target(String dateStr, String sourceFormat, String targetFormat) {  
  217.         Date date = formatStr2Date(dateStr, sourceFormat);  
  218.         return  formatDate2Str(date, targetFormat);  
  219.     }  
  220.       
  221.     /**  
  222.      * 计 算当天是该年中的第几周  
  223.      * @return  
  224.      */   
  225.     public   static   int  findWeeksNoInYear() {  
  226.         return  findWeeksNoInYear( new  Date());  
  227.     }  
  228.       
  229.     /**  
  230.      * 计 算指定日期是该年中的第几周  
  231.      * @param date  
  232.      * @return  
  233.      */   
  234.     public   static   int  findWeeksNoInYear(Date date) {  
  235.         if  (date ==  null ) {  
  236.             return   0 ;  
  237.         }  
  238.         return  findWeeksNoInYear(date2Calendar(date));  
  239.     }  
  240.       
  241.     /**  
  242.      * 计 算指定日历是该年中的第几周  
  243.      * @param calendar  
  244.      * @return  
  245.      */   
  246.     public   static   int  findWeeksNoInYear(Calendar calendar) {  
  247.         if  (calendar ==  null ) {  
  248.             return   0 ;  
  249.         }  
  250.         return  calendar.get(Calendar.WEEK_OF_YEAR);  
  251.     }  
  252.       
  253.     /**  
  254.      * 计 算一年中的第几星期是几号   
  255.      * @param year  
  256.      * @param weekInYear  
  257.      * @param dayInWeek  
  258.      * @return  
  259.      */   
  260.     public   static  Date findDateInWeekOnYear( int  year,  int  weekInYear,  int  dayInWeek) {  
  261.         Calendar calendar = Calendar.getInstance();  
  262.         if  (year >  0 ) {  
  263.             calendar.set(Calendar.YEAR, year);  
  264.         }  
  265.           
  266.         calendar.set(Calendar.WEEK_OF_YEAR, weekInYear);  
  267.         calendar.set(Calendar.DAY_OF_WEEK, dayInWeek);  
  268.           
  269.         return  calendar.getTime();  
  270.     }  
  271.       
  272.     /**  
  273.      * 相 对于当前日期的前几天(days < 000000)或者后几天(days > 0)  
  274.      * @param days  
  275.      * @return  
  276.      */   
  277.     public   static  Date dayBefore2Date( int  days) {   
  278.         Date date = new  Date();  
  279.         return  dayBefore2Object(days,  null , date);  
  280.     }  
  281.       
  282.     /**  
  283.      * 相 对于当前日期的前几天(days < 000000)或者后几天(days > 0)  
  284.      * @param days  
  285.      * @return  
  286.      */   
  287.     public   static  String dayBefore2Str( int  days) {  
  288.         String string = formatDate2Str();  
  289.         return  dayBefore2Object(days,  null , string);  
  290.     }  
  291.       
  292.     /**  
  293.      * 相 对于当前日期的前几天(days < 000000)或者后几天(days > 0)  
  294.      * @param days  
  295.      * @param format  
  296.      * @param instance  
  297.      */   
  298.     @SuppressWarnings ( "unchecked" )  
  299.     public   static  <T  extends  Object> T dayBefore2Object( int  days, String format, T instance) {  
  300.         Calendar calendar = Calendar.getInstance();  
  301.         if  (days ==  0 ) {  
  302.             return   null ;  
  303.         }  
  304.           
  305.         if  (format ==  null  || format.equals( "" )) {  
  306.             format = C_TIME_PATTON_DEFAULT;  
  307.         }  
  308.           
  309.         calendar.add(Calendar.DATE, days);  
  310.         if  (instance  instanceof  Date) {  
  311.             return  (T)calendar.getTime();  
  312.         } else   if  (instance  instanceof  String) {  
  313.             return  (T)formatDate2Str(calendar2Date(calendar), format);  
  314.         }  
  315.         return   null ;  
  316.     }  
  317.       
  318.     /**  
  319.      * 相 对于指定日期的前几天(days < 000000)或者后几天(days > 0)  
  320.      * @param date  
  321.      * @param days  
  322.      * @return  
  323.      */   
  324.     public   static  Date defineDayBefore2Date(Date date,  int  days) {  
  325.         Date dateInstance = new  Date();  
  326.         return  defineDayBefore2Object(date, days,  null , dateInstance);  
  327.     }  
  328.       
  329.     /**  
  330.      * 相 对于指定日期的前几天(days < 000000)或者后几天(days > 0)  
  331.      * @param date  
  332.      * @param days  
  333.      * @return  
  334.      */   
  335.     public   static  String defineDayBefore2Str(Date date,  int  days) {  
  336.         String stringInstance = formatDate2Str();  
  337.         return  defineDayBefore2Object(date, days,  null , stringInstance);  
  338.     }  
  339.       
  340.     /**  
  341.      * 相 对于指定日期的前几天(days < 000000)或者后几天(days > 0)  
  342.      * @param <T>  
  343.      * @param date  
  344.      * @param days  
  345.      * @param format  
  346.      * @param instance  
  347.      * @return  
  348.      */   
  349.     @SuppressWarnings ( "unchecked" )  
  350.     public   static  <T  extends  Object> T defineDayBefore2Object(Date date,   
  351.             int  days, String format, T instance) {  
  352.         if  (date ==  null  || days ==  0 ) {  
  353.             return   null ;  
  354.         }  
  355.           
  356.         if  (format ==  null  || format.equals( "" )) {  
  357.             format = C_TIME_PATTON_DEFAULT;  
  358.         }  
  359.           
  360.         Calendar calendar = date2Calendar(date);  
  361.         calendar.add(Calendar.DATE, days);  
  362.         if  (instance  instanceof  Date) {  
  363.             return  (T)calendar.getTime();  
  364.         } else   if  (instance  instanceof  String) {  
  365.             return  (T)formatDate2Str(calendar2Date(calendar), format);  
  366.         }  
  367.         return   null ;  
  368.     }  
  369.       
  370.     /**  
  371.      * 相 对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间  
  372.      * @param months  
  373.      * @return  
  374.      */   
  375.     public   static  Date monthBefore2Date( int  months) {  
  376.         Date date = new  Date();  
  377.         return  monthBefore2Object(months,  null , date);  
  378.     }  
  379.       
  380.     /**  
  381.      * 相 对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间  
  382.      * @param months  
  383.      * @return  
  384.      */   
  385.     public   static  String monthBefore2Str( int  months) {  
  386.         String string = formatDate2Str();  
  387.         return  monthBefore2Object(months,  null , string);  
  388.     }  
  389.       
  390.     /**  
  391.      * 相 对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间  
  392.      * @param <T>  
  393.      * @param months  
  394.      * @param format  
  395.      * @param instance  
  396.      */   
  397.     @SuppressWarnings ( "unchecked" )  
  398.     public   static  <T  extends  Object> T monthBefore2Object( int  months, String format, T instance) {  
  399.         if  (months ==  0 ) {  
  400.             return   null ;  
  401.         }  
  402.           
  403.         if  (format ==  null  || format.equals( "" )) {  
  404.             format = C_TIME_PATTON_DEFAULT;  
  405.         }  
  406.         Calendar calendar = Calendar.getInstance();  
  407.         calendar.add(Calendar.MONTH, months);  
  408.           
  409.         if  (instance  instanceof  Date) {  
  410.             return  (T)calendar.getTime();  
  411.         } else   if  (instance  instanceof  String) {  
  412.             return  (T)formatDate2Str(calendar2Date(calendar), format);  
  413.         }  
  414.           
  415.         return   null ;  
  416.     }  
  417.       
  418.     /**  
  419.      * 相 对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间  
  420.      * @param date  
  421.      * @param months  
  422.      * @return  
  423.      */   
  424.     public   static  Date defineMonthBefore2Date(Date date,  int  months) {  
  425.         Date dateInstance = new  Date();  
  426.         return  defineMonthBefore2Object(date, months,  null , dateInstance);  
  427.     }  
  428.       
  429.     /**  
  430.      * 相 对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间  
  431.      * @param date  
  432.      * @param months  
  433.      * @return  
  434.      */   
  435.     public   static  String defineMonthBefore2Str(Date date,  int  months) {  
  436.         String stringInstance = formatDate2Str();  
  437.         return  defineMonthBefore2Object(date, months,  null , stringInstance);  
  438.     }  
  439.       
  440.     /**  
  441.      * 相 对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间  
  442.      * @param <T>  
  443.      * @param date  
  444.      * @param months  
  445.      * @param format  
  446.      * @param instance  
  447.      * @return  
  448.      */   
  449.     @SuppressWarnings ( "unchecked" )  
  450.     public   static  <T  extends  Object> T defineMonthBefore2Object(Date date,  
  451.             int  months, String format, T instance) {  
  452.         if  (months ==  0 ) {  
  453.             return   null ;  
  454.         }  
  455.           
  456.         if  (format ==  null  || format.equals( "" )) {  
  457.             format = C_TIME_PATTON_DEFAULT;  
  458.         }  
  459.           
  460.         Calendar calendar = date2Calendar(date);  
  461.         calendar.add(Calendar.MONTH, months);  
  462.           
  463.         if  (instance  instanceof  Date) {  
  464.             return  (T)calendar.getTime();  
  465.         } else   if  (instance  instanceof  String) {  
  466.             return  (T)formatDate2Str(calendar2Date(calendar), format);  
  467.         }  
  468.           
  469.         return   null ;  
  470.     }  
  471.       
  472.     /**  
  473.      * 计 算两个日期直接差的天数  
  474.      * @param firstDate  
  475.      * @param secondDate  
  476.      * @return  
  477.      */   
  478.     public   static   int  caculate2Days(Date firstDate, Date secondDate) {  
  479.         Calendar calendar = Calendar.getInstance();  
  480.         calendar.setTime(firstDate);  
  481.         int  dayNum1 = calendar.get(Calendar.DAY_OF_YEAR);  
  482.         calendar.setTime(secondDate);  
  483.         int  dayNum2 = calendar.get(Calendar.DAY_OF_YEAR);  
  484.         return  Math.abs(dayNum1 - dayNum2);  
  485.     }  
  486.       
  487.     /**  
  488.      * 计 算两个日期直接差的天数  
  489.      * @param firstCalendar  
  490.      * @param secondCalendar  
  491.      * @return  
  492.      */   
  493.     public   static   int  caculate2Days(Calendar firstCalendar, Calendar secondCalendar) {  
  494.         if  (firstCalendar.after(secondCalendar)) {  
  495.             Calendar calendar = firstCalendar;  
  496.             firstCalendar = secondCalendar;  
  497.             secondCalendar = calendar;  
  498.         }  
  499.           
  500.         long  calendarNum1 = firstCalendar.getTimeInMillis();  
  501.         long  calendarNum2 = secondCalendar.getTimeInMillis();  
  502.         return  Math.abs(( int )((calendarNum1 - calendarNum2)/C_ONE_DAY));  
  503.     }  
  504.       
  505.     public   static   void  main(String[] args) {  
  506. //      System.out.println("当前月份的最大天 数:" + findMaxDayInMonth(new Date()));   
  507. //      System.out.println("6月份的最大天 数:" + findMaxDayInMonth(6));   
  508. //      System.out.println("1999-02月份的最大天 数:" + findMaxDayInMonth(1999, 2));   
  509. //      System.out.println("2000-02月份的最大天 数:" + findMaxDayInMonth(2000, 2));   
  510.           
  511. //      System.out.println(formatSource2Target("2009-07-24 11:02:35", null, "yyyy/MM/dd"));   
  512. //      System.out.println(findWeeksNoInYear());   
  513.           
  514. //      System.out.println("2003年的第30个星期一是那 天:" + findDateInWeekOnYear(2003, 30, Calendar.MONDAY));   
  515. //      System.out.println("2009年的第30个星期一是那 天:" + findDateInWeekOnYear(2009, 30, Calendar.FRIDAY));   
  516.           
  517. //      System.out.println("【日期格式】当前日期的前7天 是:" + dayBefore2Date(-7));   
  518. //      System.out.println("【字符格式】当前日期的前7天 是:" + dayBefore2Str(-7));   
  519. //      System.out.println("【日期格式】当前日期的后7天 是:" + dayBefore2Date(7));   
  520. //      System.out.println("【字符格式】当前日期的后7天 是:" + dayBefore2Str(7));   
  521.           
  522. //      System.out.println(formatStr2Date("2009-07-22", "yyyy-MM-dd"));   
  523.           
  524. //      System.out.println("【日期格式】2009-07-22的前7天是:" +    
  525. //              defineDayBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -7));   
  526. //      System.out.println("【字符格式】2009-07-22的前7天是:" +    
  527. //              defineDayBefore2Str(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -7));   
  528. //      System.out.println("【日期格式】2009-07-22的后7天是:" +    
  529. //              defineDayBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 7));   
  530. //      System.out.println("【字符格式】2009-07-22的后7天是:" +    
  531. //              defineDayBefore2Str(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 7));   
  532.           
  533. //      System.out.println("【日期格式】相对于当前时间的前2月日期 是:" + monthBefore2Date(-2));   
  534. //      System.out.println("【字符格式】相对于当前时间的前2月日期 是:" + monthBefore2Date(-2));   
  535. //      System.out.println("【日期格式】相对于当前时间的后2月日期 是:" + monthBefore2Date(2));   
  536. //      System.out.println("【字符格式】相对于当前时间的后2月日期 是:" + monthBefore2Date(2));   
  537.           
  538. //      System.out.println("【日期格式】2009-07-22的前2月日期 是:" +    
  539. //              defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -2));   
  540. //      System.out.println("【字符格式】2009-07-22的前2月日期是:" +   
  541. //              defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -2));   
  542. //      System.out.println("【日期格式】2009-07-22的后2月日期 是:" +    
  543. //              defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 2));   
  544. //      System.out.println("【字符格式】2009-07-22的后2月日期 是:" +    
  545. //              defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 2));   
  546.           
  547. //      Date firstDate = formatStr2Date("2009-07-22", "yyyy-MM-dd");   
  548. //      Date secondDate = formatStr2Date("2009-07-18", "yyyy-MM-dd");   
  549. //      System.out.println(caculate2Days(firstDate, secondDate));   
  550.           
  551.         Calendar firstC = date2Calendar(formatStr2Date("2009-07-22""yyyy-MM-dd" ));  
  552.         Calendar secondC = date2Calendar(formatStr2Date("2009-07-18""yyyy-MM-dd" ));  
  553.         System.out.println(caculate2Days(firstC, secondC));  
  554.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值