Java对日期操作处理类

项目中经常用到对日期相关操作

Dateutil.java代码   收藏代码
  1. package com.seg.common.util;  
  2.   
  3.   
  4.   
  5. import java.text.DateFormat;  
  6. import java.text.DecimalFormat;  
  7. import java.text.ParseException;  
  8. import java.text.ParsePosition;  
  9. import java.text.SimpleDateFormat;  
  10. import java.util.Calendar;  
  11. import java.util.Date;  
  12. import java.util.GregorianCalendar;  
  13.   
  14. import org.apache.commons.beanutils.ConversionException;  
  15. import org.apache.commons.lang.StringUtils;  
  16. import org.apache.commons.logging.Log;  
  17. import org.apache.commons.logging.LogFactory;  
  18.   
  19.   
  20. /**  
  21.  * 日期处理工具类  
  22.  * @author Lee  
  23.  */  
  24.   
  25. public class DateUtil {  
  26.     //~ Static fields/initializers =============================================  
  27.       
  28.       
  29.     private static Log log = LogFactory.getLog(DateUtil.class);  
  30.     private static String defaultDatePattern = null;  
  31.     private static String timePattern = "HH:mm";  
  32.     public static final String TS_FORMAT = DateUtil.getDatePattern() + " HH:mm:ss.S";  
  33.     private static Calendar cale = Calendar.getInstance();  
  34.     private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  35.     private static SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss");  
  36.     private static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  37.   
  38.     //~ Methods ================================================================  
  39.   
  40.     public DateUtil(){  
  41.     }  
  42.       
  43.     /**  
  44.      * 获得服务器当前日期及时间,以格式为:yyyy-MM-dd HH:mm:ss的日期字符串形式返回  
  45.      */  
  46.     public static String getDateTime(){  
  47.         try{  
  48.             return sdf2.format(cale.getTime());  
  49.         } catch(Exception e){  
  50.             log.debug("DateUtil.getDateTime():" + e.getMessage());  
  51.             return "";  
  52.         }  
  53.     }  
  54.     /**  
  55.      * 获得服务器当前日期,以格式为:yyyy-MM-dd的日期字符串形式返回  
  56.      */  
  57.     public static String getDate(){  
  58.         try{  
  59.             return sdf.format(cale.getTime());  
  60.         } catch(Exception e){  
  61.             log.debug("DateUtil.getDate():" + e.getMessage());  
  62.             return "";  
  63.         }  
  64.     }  
  65.   
  66.     /**  
  67.      * 获得服务器当前时间,以格式为:HH:mm:ss的日期字符串形式返回  
  68.      */  
  69.     public static String getTime(){  
  70.         String temp = "";  
  71.         try{  
  72.             temp += sdf1.format(cale.getTime());  
  73.             return temp;  
  74.         } catch(Exception e){  
  75.             log.debug("DateUtil.getTime():" + e.getMessage());  
  76.             return "";  
  77.         }  
  78.     }  
  79.   
  80.   
  81.     /**  
  82.      * 统计时开始日期的默认值,  
  83.      * 今年的开始时间  
  84.      */  
  85.     public static String getStartDate(){  
  86.         try{  
  87.             return getYear() + "-01-01";  
  88.         } catch(Exception e){  
  89.             log.debug("DateUtil.getStartDate():" + e.getMessage());  
  90.             return "";  
  91.         }  
  92.     }  
  93.   
  94.     /**  
  95.      * 统计时结束日期的默认值  
  96.      */  
  97.     public static String getEndDate(){  
  98.         try{  
  99.             return getDate();  
  100.         } catch(Exception e){  
  101.             log.debug("DateUtil.getEndDate():" + e.getMessage());  
  102.             return "";  
  103.         }  
  104.     }  
  105.   
  106.   
  107.     /**  
  108.      * 获得服务器当前日期的年份  
  109.      */  
  110.     public static String getYear(){  
  111.         try{  
  112.             //返回的int型,需要字符串转换  
  113.             return String.valueOf(cale.get(Calendar.YEAR));  
  114.         } catch(Exception e){  
  115.             log.debug("DateUtil.getYear():" + e.getMessage());  
  116.             return "";  
  117.         }  
  118.     }  
  119.   
  120.     /**  
  121.      * 获得服务器当前日期的月份  
  122.      */  
  123.     public static String getMonth(){  
  124.         try{  
  125.             //一个数字格式,非常好  
  126.             java.text.DecimalFormat df = new java.text.DecimalFormat();  
  127.             df.applyPattern("00");  
  128.             return df.format((cale.get(Calendar.MONTH) + 1));  
  129.             //return String.valueOf(cale.get(Calendar.MONTH) + 1);  
  130.         } catch(Exception e){  
  131.             log.debug("DateUtil.getMonth():" + e.getMessage());  
  132.             return "";  
  133.         }  
  134.     }  
  135.   
  136.     /**  
  137.      * 获得服务器在当前月中天数  
  138.      */  
  139.     public static String getDay(){  
  140.         try{  
  141.             return String.valueOf(cale.get(Calendar.DAY_OF_MONTH));  
  142.         } catch(Exception e){  
  143.             log.debug("DateUtil.getDay():" + e.getMessage());  
  144.             return "";  
  145.         }  
  146.     }  
  147.   
  148.     /**  
  149.      * 比较两个日期相差的天数,  
  150.      * 第一个日期要比第二个日期要晚  
  151.      */  
  152.     public static int getMargin(String date1,String date2){  
  153.         int margin;  
  154.         try{  
  155.             ParsePosition pos = new ParsePosition(0);  
  156.             ParsePosition pos1 = new ParsePosition(0);  
  157.             Date dt1 = sdf.parse(date1,pos);  
  158.             Date dt2 = sdf.parse(date2,pos1);  
  159.             long l = dt1.getTime() - dt2.getTime();  
  160.             margin = (int)(l / (24 * 60 * 60 * 1000));  
  161.             return margin;  
  162.         } catch(Exception e){  
  163.             log.debug("DateUtil.getMargin():" + e.toString());  
  164.             return 0;  
  165.         }  
  166.     }  
  167.   
  168.   
  169.     /**  
  170.      * 比较两个日期相差的天数,格式不一样  
  171.      * 第一个日期要比第二个日期要晚  
  172.      */  
  173.     public static double getDoubleMargin(String date1,String date2){  
  174.         double margin;  
  175.         try{  
  176.             ParsePosition pos = new ParsePosition(0);  
  177.             ParsePosition pos1 = new ParsePosition(0);  
  178.             Date dt1 = sdf2.parse(date1,pos);  
  179.             Date dt2 = sdf2.parse(date2,pos1);  
  180.             long l = dt1.getTime() - dt2.getTime();  
  181.             margin = (l / (24 * 60 * 60 * 1000.00));  
  182.             return margin;  
  183.         } catch(Exception e){  
  184.             log.debug("DateUtil.getMargin():" + e.toString());  
  185.             return 0;  
  186.         }  
  187.     }  
  188.   
  189.   
  190.     /**  
  191.      * 比较两个日期相差的月数  
  192.      */  
  193.     public static int getMonthMargin(String date1,String date2){  
  194.         int margin;  
  195.         try{  
  196.             margin  = (Integer.parseInt(date2.substring(0,4)) - Integer.parseInt(date1.substring(0,4)))* 12;  
  197.             margin += (Integer.parseInt(date2.substring(4,7).replaceAll("-0","-")) - Integer.parseInt(date1.substring(4,7).replaceAll("-0","-")));  
  198.             return margin;  
  199.         } catch(Exception e){  
  200.             log.debug("DateUtil.getMargin():" + e.toString());  
  201.             return 0;  
  202.         }  
  203.     }  
  204.   
  205.     /**  
  206.      * 返回日期加X天后的日期  
  207.      */  
  208.     public static String addDay(String date,int i){  
  209.         try{  
  210.             GregorianCalendar gCal = new GregorianCalendar(Integer.parseInt(date.substring(0,4)),Integer.parseInt(date.substring(5,7))-1,Integer.parseInt(date.substring(8,10)));  
  211.             gCal.add(GregorianCalendar.DATE,i);  
  212.             return sdf.format(gCal.getTime());  
  213.         } catch(Exception e){  
  214.             log.debug("DateUtil.addDay():" + e.toString());  
  215.             return getDate();  
  216.         }  
  217.     }  
  218.   
  219.     /**  
  220.      * 返回日期加X月后的日期  
  221.      */  
  222.     public static String addMonth(String date,int i){  
  223.         try{  
  224.             GregorianCalendar gCal = new GregorianCalendar(Integer.parseInt(date.substring(0,4)),Integer.parseInt(date.substring(5,7))-1,Integer.parseInt(date.substring(8,10)));  
  225.             gCal.add(GregorianCalendar.MONTH,i);  
  226.             return sdf.format(gCal.getTime());  
  227.         } catch(Exception e){  
  228.             log.debug("DateUtil.addMonth():" + e.toString());  
  229.             return getDate();  
  230.         }  
  231.     }  
  232.   
  233.     /**  
  234.      * 返回日期加X年后的日期  
  235.      */  
  236.     public static String addYear(String date,int i){  
  237.         try{  
  238.             GregorianCalendar gCal = new GregorianCalendar(Integer.parseInt(date.substring(0,4)),Integer.parseInt(date.substring(5,7))-1,Integer.parseInt(date.substring(8,10)));  
  239.             gCal.add(GregorianCalendar.YEAR,i);  
  240.             return sdf.format(gCal.getTime());  
  241.         } catch(Exception e){  
  242.             log.debug("DateUtil.addYear():" + e.toString());  
  243.             return "";  
  244.         }  
  245.     }  
  246.   
  247.   
  248.     /**  
  249.      * 返回某年某月中的最大天  
  250.      */  
  251.     public static int getMaxDay(String year,String month){  
  252.         int day = 0;  
  253.         try{  
  254.             int iyear = Integer.parseInt(year);  
  255.             int imonth = Integer.parseInt(month);  
  256.             if(imonth == 1 || imonth == 3 || imonth == 5 || imonth == 7 || imonth == 8 || imonth == 10 || imonth == 12){  
  257.                 day = 31;  
  258.             } else if(imonth == 4 || imonth == 6 || imonth == 9 || imonth == 11){  
  259.                 day = 30;  
  260.             } else if((0 == (iyear % 4)) && (0 != (iyear % 100)) || (0 == (iyear % 400))){  
  261.                 day = 29;  
  262.             } else{  
  263.                 day = 28;  
  264.             }  
  265.             return day;  
  266.         } catch(Exception e){  
  267.             log.debug("DateUtil.getMonthDay():" + e.toString());  
  268.             return 1;  
  269.         }  
  270.     }  
  271.       
  272.   
  273.   
  274.     /**  
  275.      * 格式化日期  
  276.      */  
  277.     @SuppressWarnings("static-access")  
  278.     public String rollDate(String orgDate,int Type,int Span){  
  279.         try{  
  280.             String temp = "";  
  281.             int iyear,imonth,iday;  
  282.             int iPos = 0;  
  283.             char seperater = '-';  
  284.             if(orgDate == null || orgDate.length() < 6){  
  285.                 return "";  
  286.             }  
  287.   
  288.             iPos = orgDate.indexOf(seperater);  
  289.             if(iPos > 0){  
  290.                 iyear = Integer.parseInt(orgDate.substring(0,iPos));  
  291.                 temp = orgDate.substring(iPos + 1);  
  292.             } else{  
  293.                 iyear = Integer.parseInt(orgDate.substring(0,4));  
  294.                 temp = orgDate.substring(4);  
  295.             }  
  296.   
  297.             iPos = temp.indexOf(seperater);  
  298.             if(iPos > 0){  
  299.                 imonth = Integer.parseInt(temp.substring(0,iPos));  
  300.                 temp = temp.substring(iPos + 1);  
  301.             } else{  
  302.                 imonth = Integer.parseInt(temp.substring(0,2));  
  303.                 temp = temp.substring(2);  
  304.             }  
  305.   
  306.             imonth--;  
  307.             if(imonth < 0 || imonth > 11){  
  308.                 imonth = 0;  
  309.             }  
  310.   
  311.             iday = Integer.parseInt(temp);  
  312.             if(iday < 1 || iday > 31)  
  313.                 iday = 1;  
  314.   
  315.             Calendar orgcale = Calendar.getInstance();  
  316.             orgcale.set(iyear,imonth,iday);  
  317.             temp = this.rollDate(orgcale,Type,Span);  
  318.             return temp;  
  319.         }catch(Exception e){  
  320.             return "";  
  321.         }  
  322.     }  
  323.   
  324.     public static String rollDate(Calendar cal,int Type,int Span){  
  325.         try{  
  326.             String temp = "";  
  327.             Calendar rolcale;  
  328.             rolcale = cal;  
  329.             rolcale.add(Type,Span);  
  330.             temp = sdf.format(rolcale.getTime());  
  331.             return temp;  
  332.         }catch(Exception e){  
  333.             return "";  
  334.         }  
  335.     }  
  336.   
  337.     /**  
  338.      *   
  339.      * 返回默认的日期格式  
  340.      *   
  341.      */  
  342.     public static synchronized String getDatePattern() {  
  343.         defaultDatePattern = "yyyy-MM-dd";  
  344.         return defaultDatePattern;  
  345.     }  
  346.   
  347.     /**  
  348.      * 将指定日期按默认格式进行格式代化成字符串后输出如:yyyy-MM-dd  
  349.      */  
  350.     public static final String getDate(Date aDate) {  
  351.         SimpleDateFormat df = null;  
  352.         String returnValue = "";  
  353.   
  354.         if (aDate != null) {  
  355.             df = new SimpleDateFormat(getDatePattern());  
  356.             returnValue = df.format(aDate);  
  357.         }  
  358.   
  359.         return (returnValue);  
  360.     }  
  361.   
  362.   
  363.   
  364.     /**  
  365.      * 取得给定日期的时间字符串,格式为当前默认时间格式  
  366.      */  
  367.     public static String getTimeNow(Date theTime) {  
  368.         return getDateTime(timePattern, theTime);  
  369.     }  
  370.   
  371.     /**  
  372.      * 取得当前时间的Calendar日历对象  
  373.      */  
  374.     public Calendar getToday() throws ParseException {  
  375.         Date today = new Date();  
  376.         SimpleDateFormat df = new SimpleDateFormat(getDatePattern());  
  377.         String todayAsString = df.format(today);  
  378.         Calendar cal = new GregorianCalendar();  
  379.         cal.setTime(convertStringToDate(todayAsString));  
  380.         return cal;  
  381.     }  
  382.   
  383.     /**  
  384.      * 将日期类转换成指定格式的字符串形式  
  385.      */  
  386.     public static final String getDateTime(String aMask, Date aDate) {  
  387.         SimpleDateFormat df = null;  
  388.         String returnValue = "";  
  389.   
  390.         if (aDate == null) {  
  391.             log.error("aDate is null!");  
  392.         } else {  
  393.             df = new SimpleDateFormat(aMask);  
  394.             returnValue = df.format(aDate);  
  395.         }  
  396.         return (returnValue);  
  397.     }  
  398.       
  399.     /**  
  400.      * 将指定的日期转换成默认格式的字符串形式  
  401.      */  
  402.     public static final String convertDateToString(Date aDate) {  
  403.         return getDateTime(getDatePattern(), aDate);  
  404.     }  
  405.   
  406.       
  407.     /**  
  408.      * 将日期字符串按指定格式转换成日期类型  
  409.      * @param aMask 指定的日期格式,如:yyyy-MM-dd   
  410.      * @param strDate 待转换的日期字符串  
  411.      */  
  412.       
  413.     public static final Date convertStringToDate(String aMask, String strDate)  
  414.       throws ParseException {  
  415.         SimpleDateFormat df = null;  
  416.         Date date = null;  
  417.         df = new SimpleDateFormat(aMask);  
  418.   
  419.         if (log.isDebugEnabled()) {  
  420.             log.debug("converting '" + strDate + "' to date with mask '"  
  421.                       + aMask + "'");  
  422.         }  
  423.         try {  
  424.             date = df.parse(strDate);  
  425.         } catch (ParseException pe) {  
  426.             log.error("ParseException: " + pe);  
  427.             throw pe;  
  428.         }  
  429.         return (date);  
  430.     }  
  431.       
  432.     /**  
  433.      * 将日期字符串按默认格式转换成日期类型  
  434.      */  
  435.     public static Date convertStringToDate(String strDate)  
  436.       throws ParseException {  
  437.         Date aDate = null;  
  438.   
  439.         try {  
  440.             if (log.isDebugEnabled()) {  
  441.                 log.debug("converting date with pattern: " + getDatePattern());  
  442.             }  
  443.             aDate = convertStringToDate(getDatePattern(), strDate);  
  444.         } catch (ParseException pe) {  
  445.             log.error("Could not convert '" + strDate  
  446.                       + "' to a date, throwing exception");  
  447.             throw new ParseException(pe.getMessage(),  
  448.                                      pe.getErrorOffset());  
  449.                       
  450.         }  
  451.   
  452.         return aDate;  
  453.     }  
  454.       
  455.     /**  
  456.      * 返回一个JAVA简单类型的日期字符串  
  457.      */  
  458.     public static String getSimpleDateFormat(){  
  459.         SimpleDateFormat formatter=new SimpleDateFormat();  
  460.         String NDateTime=formatter.format(new Date());  
  461.         return NDateTime;  
  462.     }  
  463.       
  464.     /**  
  465.      * 将两个字符串格式的日期进行比较  
  466.      * @param last 要比较的第一个日期字符串  
  467.      * @param now   要比较的第二个日期格式字符串  
  468.      * @return true(last 在now 日期之前),false(last 在now 日期之后)  
  469.      */  
  470.     public static boolean compareTo(String last, String now) {  
  471.         try {  
  472.             SimpleDateFormat formatter = new SimpleDateFormat(  
  473.                     "yyyy-MM-dd HH:mm:ss");  
  474.             Date temp1 = formatter.parse(last);  
  475.             Date temp2 = formatter.parse(now);  
  476.             if (temp1.after(temp2))  
  477.                 return false;  
  478.             else if (temp1.before(temp2))  
  479.                 return true;  
  480.         } catch (ParseException e) {  
  481.             log.debug(e.getMessage());  
  482.         }  
  483.         return false;  
  484.     }      
  485.       
  486.     protected Object convertToDate(Class type, Object value) {  
  487.         DateFormat df = new SimpleDateFormat(TS_FORMAT);  
  488.         if (value instanceof String) {  
  489.             try {  
  490.                 if (StringUtils.isEmpty(value.toString())) {  
  491.                     return null;  
  492.                 }  
  493.                 return df.parse((String) value);  
  494.             } catch (Exception pe) {  
  495.                 throw new ConversionException("Error converting String to Timestamp");  
  496.             }  
  497.         }  
  498.   
  499.         throw new ConversionException("Could not convert "  
  500.                 + value.getClass().getName() + " to " + type.getName());  
  501.     }  
  502.   
  503.   
  504.   
  505.   
  506.       
  507.     /**  
  508.      *  为查询日期添加最小时间  
  509.      *  @param 目标类型Date  
  510.      *  @param 转换参数Date  
  511.      *  @return   
  512.      */     
  513.     @SuppressWarnings("deprecation")  
  514.     public static Date addStartTime(Date param) {  
  515.         Date date = param;  
  516.         try{  
  517.             date.setHours(0);  
  518.             date.setMinutes(0);  
  519.             date.setSeconds(0);  
  520.             return date;  
  521.         }catch(Exception ex){  
  522.             return date;  
  523.         }  
  524.     }  
  525.   
  526.   
  527.       
  528.     /**  
  529.      * 为查询日期添加最大时间  
  530.      *  @param 目标类型Date  
  531.      *  @param 转换参数Date  
  532.      *  @return   
  533.      */     
  534.     @SuppressWarnings("deprecation")  
  535.     public static Date addEndTime(Date param) {  
  536.         Date date = param;  
  537.         try{  
  538.             date.setHours(23);  
  539.             date.setMinutes(59);  
  540.             date.setSeconds(0);  
  541.             return date;  
  542.         }catch(Exception ex){  
  543.             return date;  
  544.         }  
  545.     }  
  546.       
  547.   
  548.       
  549.     /**  
  550.      * 返回系统现在年份中指定月份的天数  
  551.      * @param 月份month  
  552.      * @return 指定月的总天数  
  553.      */  
  554.     @SuppressWarnings("deprecation")  
  555.     public static String getMonthLastDay(int month)  
  556.     {  
  557.         Date date=new Date();  
  558.         int[][] day={{0,30,28,31,30,31,30,31,31,30,31,30,31},  
  559.                         {0,31,29,31,30,31,30,31,31,30,31,30,31}};     
  560.         int year=date.getYear()+1900;  
  561.         if(year%4==0 && year%100!=0 || year%400==0)   
  562.         {  
  563.             return day[1][month]+"";  
  564.         }  
  565.         else  
  566.         {  
  567.             return day[0][month]+"";  
  568.         }  
  569.     }  
  570.       
  571.     /**  
  572.      * 返回指定年份中指定月份的天数  
  573.      * @param 年份year  
  574.      * @param 月份month  
  575.      * @return 指定月的总天数  
  576.      */  
  577.     public static String getMonthLastDay(int year,int month)  
  578.     {  
  579.         int[][] day={{0,30,28,31,30,31,30,31,31,30,31,30,31},  
  580.                         {0,31,29,31,30,31,30,31,31,30,31,30,31}};  
  581.         if(year%4==0 && year%100!=0 || year%400==0)   
  582.         {  
  583.             return day[1][month]+"";  
  584.         }  
  585.         else  
  586.         {  
  587.             return day[0][month]+"";  
  588.         }  
  589.     }  
  590.       
  591.     /**  
  592.      * 取得当前时间的日戳  
  593.      * @return  
  594.      */  
  595.     @SuppressWarnings("deprecation")  
  596.     public static String getTimestamp(){  
  597.         Date date=new Date();  
  598.         String timestamp=""+(date.getYear()+1900)+date.getMonth()+date.getDate()+date.getMinutes()+date.getSeconds()+date.getTime();  
  599.         return timestamp;  
  600.     }  
  601.     /**  
  602.      * 取得指定时间的日戳  
  603.      * @return  
  604.      */  
  605.     @SuppressWarnings("deprecation")  
  606.     public static String getTimestamp(Date date){  
  607.         String timestamp=""+(date.getYear()+1900)+date.getMonth()+date.getDate()+date.getMinutes()+date.getSeconds()+date.getTime();  
  608.         return timestamp;  
  609.     }  
  610.     public static void main(String[] args){  
  611.         System.out.println(DateUtil.getDate());//获取日期格式为2010-08-12  
  612.         System.out.println(DateUtil.getDateTime());//获取日期格式为2010-08-12 18:08:21  
  613.         System.out.println(DateUtil.getTime());//获取日期格式为18:08:21  
  614.         System.out.println(DateUtil.getYear());//获取当前时间年份2010  
  615.         System.out.println(DateUtil.getMonth());//获取当年时间月份08  
  616.         System.out.println(DateUtil.getStartDate());//获取2010-01-01  
  617.         System.out.println(DateUtil.getEndDate());//2010-08-12  
  618.         System.out.println(DateUtil.getDay());//获得服务器在当前月中已经过了的天数12  
  619.         System.out.println(DateUtil.getMargin("2010-05-02""2010-04-01"));//比较两个日期相差的天数  
  620.         System.out.println(DateUtil.getDoubleMargin("2010-05-07 23:22:11""2010-04-01 01:33:33"));  
  621.     }  

你可能感兴趣的:(java,日期)