自己写的关于时间处理的一个类

package com.zrar.zjgp.cfm.ctrl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * 描述:此类为一自定义日期时间类,包括对于时间的各种操作,返回值均为String字符串
 *      1。获得当前日期  getLocalDate()
 *      2。获得当前时间  getLocalTime()
 *      3。获得当前星期X  getLocalWeek()
 *      4。获得当前日期时间 getLocalDateTime()
 *      5。获得当前日期星期几 getLocalDateWeek()
 *      6。获得当前日期时间星期X getLocalDateTimeWeek()
 *      7。在当前日期增加或者减少年,月,日 getDateAdd××() 其中××为Year,Month,Day
 *      8。在自己定义的时间上增加或者减少小时,分钟,秒 getTimeAdd×× 其中××为hour,minute,second
 *      9。设置日期,时间
 *      10。计算两指定时间的时间差 getTimeMinus()
 *      11。计算两指定日期的时间差 结果为天数 getDateMinus()
 *      12。将从数据库中得到的时间差转换为标准的 XX 天 XX 小时 XX 分 XX 秒 getDBTimeMinus()
 *      13。日期转换 在String Date 和Calendar 之间互转 convert();
 *      14。返回传入的日期之间的所包含天数 getDateMinusList();
 *
 * 注意事项: 1.日期格式 2006-06-06  以"-"分割。
 *          2.时间格式 20:23:23   以":"分割。
 *          3.JDK 1.4 以上。
 *
 * 实例:
 *
 * @author wyhai
 */

public class ZrarDateTime {
    private  int      x;      //日期属性 年
    private  int      y;                    //日期属性 月
    private  int      z;                    //日期属性 日
    private  Calendar localTime;            //当前日期
    public ZrarDateTime()
    {
        localTime = Calendar.getInstance();
    }
    /**
     * 功能:得到当前日期 格式为:xxxx-yy-zz (eg: 2006-06-26)<br>
     * @return String
     * @author Administrator
     */
    public String getLocalDate()
    {
        String strY = null;
        String strZ = null;
        x = localTime.get(Calendar.YEAR);
        y = localTime.get(Calendar.MONTH) + 1; 
        z = localTime.get(Calendar.DATE);
        strY = y >= 10 ? String.valueOf(y) : ("0" + y) ;
        strZ = z >= 10 ? String.valueOf(z) : ("0" + z) ;
        return  x + "-" + strY + "-" + strZ;
    }
    /**
     * 功能:得到当前时间 格式为:xx:yy:zz (eg: 4:26:59)<br>
     * @return String
     * @author Administrator
     */
    public String getLocalTime()
    {
        String strY = null;
        String strZ = null;
        x = localTime.get(Calendar.HOUR);
        y = localTime.get(Calendar.MINUTE); 
        z = localTime.get(Calendar.SECOND);
        strY = y >= 10 ? String.valueOf(y) : ("0" + y) ;
        strZ = z >= 10 ? String.valueOf(z) : ("0" + z) ;
        return  x + ":" + strY + ":" + strZ;
    }
    /**
     *
     * 功能:得到当前时间    星期x<br>
     *
     * @return dateWeek
     * @author Administrator
     */
    public String getLocalWeek()
    {
        String dateWeek = null;
        int nWeek = 0;
        nWeek = localTime.get(Calendar.DAY_OF_WEEK) - 1;
        switch (nWeek)
        {
            case 1: dateWeek = "星期一" ; break;
            case 2: dateWeek = "星期二" ; break;
            case 3: dateWeek = "星期三" ; break;
            case 4: dateWeek = "星期四" ; break;
            case 5: dateWeek = "星期五" ; break;
            case 6: dateWeek = "星期六" ; break;
            case 0: dateWeek = "星期日" ; break;
        }
        return dateWeek;
    }
    /**
     * 功能:得到当前日期时间 格式为:xxxx-yy-zz xx:yy:zz (eg: 2006-06-26 4:26:59 )<br>
     * @return String dateTime
     * @author Administrator
     */
    public String getLocalDateTime()
    {
        String dateTime = getLocalDate() + " " + getLocalTime();
        return dateTime;
    }
    /**
     *
     * 功能:得到当前日期  格式为:xxxx-yy-zz 星期X<br>
     *
     * @return dateWeek
     * @author Administrator
     */
    public String getLocalDateWeek()
    {
        String dateWeek = null ;
        String [] xx = getLocalDate().split("-") ;
        if(xx.length==3)
        {
            dateWeek = xx[0] + "年" + xx[1]+ "月" + xx[2] + "日 " + getLocalWeek() ;
        }else
        {
            dateWeek = "日期格式为YYYY-MM-DD 你输入的有误!" ;
        }
        return dateWeek;  
    }
    /**
     *
     * 功能:得到当前日期时间 格式为:xxxx-yy-zz 星期X xx:yy:zz(eg: 2006-06-26 星期X 4:26:59 )<br> <br>
     *
     * @return
     * @author Administrator
     */
    public String getLocalDateTimeWeek()
    {
        String dateTimeWeek = getLocalDateWeek() + " " +getLocalTime() ;
        return dateTimeWeek;
    }
    /**
     * 功能:得到当前日期的前面,或者后面几天<br>
     * @param days (正数表示后面几天,负数表示前面几天)
     * @return String
     * @author Administrator
     */
    public String getDateAddDay(int days)
    {
        return  addDateAll(Calendar.DATE,days);      
    }
    /**
     * 功能:得到当前日期的前面,或者后面几月<br>
     * @param months (正数表示后面几月,负数表示前面几月)
     * @return String
     * @author Administrator
     */
    public String getDateAddMonth(int months)
    {
        return  addDateAll(Calendar.MONTH,months);
    }
    /**
     * 功能:得到当前日期的前面,或者后面几年<br>
     * @param years (正数表示后面几年,负数表示前面几年)
     * @return String
     * @author Administrator
     */
    public String getDateAddYear(int years)
    {
        return  addDateAll(Calendar.YEAR,years);
    }
    /**
     * 功能:设置自定义日期<br>
     * @param date
     * @return
     * @author Administrator
     */
    private void setDate(String date)
    {
        String dates[] = date.split("-");
        x = Integer.parseInt(dates[0].trim());
        y = Integer.parseInt(dates[1].trim()) - 1;
        z = Integer.parseInt(dates[2].trim());
        localTime.set(x,y,z);      
    }
    /**
     * 功能:设置自定义时间<br>
     * @param time
     * @return
     * @author Administrator
     */
    private void setTime(String time)
    {
        String times[] = time.split(":");
        x = Integer.parseInt(times[0]);
        y = Integer.parseInt(times[1]);
        z = Integer.parseInt(times[2]);
        localTime.set(1999,9,9,x,y,z);      
    }
    /**
     * 功能:得到自定义指定日期前面,或者后面的几天<br>
     * @param date (自定义日期时间 eg: 2006-06-06)
     * @param days (正数表示后面几天,负数表示前面几天)
     * @return String
     * @author Administrator
     */
    public String getDateAddDay(String date , int days)
    {
        if(date.split("-").length == 3)
        {
            setDate(date);
            return  addDateAll(Calendar.DATE,days);       
        }else
        {
            return "日期格式为YYYY-MM-DD 你输入的有误!" ;
        }
    }
    /**
     * 功能:得到自定义日期前面,或者后面的几月<br>
     * @param date  (自定义日期时间 eg: 2006-06-06)
     * @param months (正数表示后面几月,负数表示前面几月)
     * @return
     * @author Administrator
     */
    public String getDateAddMonth(String date , int months)
    {
        if(date.split("-").length == 3)
        {
            setDate(date);
            return  addDateAll(Calendar.MONTH,months);
        }else
        {
            return "日期格式为YYYY-MM-DD 你输入的有误!" ;
        }
    }
    /**
     * 功能:得到自定义日期前面,或者后面的几年<br>
     * @param date  (自定义日期时间 eg: 2006-06-06)
     * @param years  (正数表示后面几年,负数表示前面几年)
     * @return String
     * @author Administrator
     */
    public String getDateAddYear(String date , int years)
    {
        if(date.split("-").length == 3)
        {
            setDate(date);
            return  addDateAll(Calendar.YEAR,years); 
        }else
        {
            return "日期格式为YYYY-MM-DD 你输入的有误!" ;
        }
    }
    /**
     * 功能:得到当前时间的前面,或者后面几秒<br>
     * @param seconds (正数表示后面几秒,负数表示前面几秒)
     * @return String
     * @author Administrator
     */
    public String getTimeAddSecond(int seconds)
    {
        return  addTimeAll(Calendar.SECOND,seconds);
    }
    /**
     * 功能:得到当前时间的前面,或者后面几分<br>
     * @param minutes (正数表示后面几分,负数表示前面几分)
     * @return String
     * @author Administrator
     */
    public String getTimeAddMinute(int minutes)
    {
        return  addTimeAll(Calendar.MINUTE,minutes);
    }
    /**
     * 功能:得到当前时间的前面,或者后面几小时<br>
     * @param hours (正数表示后面几小时,负数表示前面几小时)
     * @return String
     * @author Administrator
     */
    public String getTimeAddHour(int hours)
    {
        return  addTimeAll(Calendar.HOUR,hours);
    }
    /**
     * 功能:得到指定时间的前面,或者后面几秒<br>
     * @param time (指定时间)
     * @param seconds (正数表示后面几秒,负数表示前面几秒)
     * @return String
     * @author Administrator
     */
    public String getTimeAddSecond(String time ,int seconds)
    {      
        if(time.split(":").length == 3)
        {
            setTime(time);
            return  addTimeAll(Calendar.SECOND,seconds);
        }else
        {
            return "时间格式为hh:mm:ss 你输入的有误!" ;
        }
    }
    /**
     * 功能:得到指定时间的前面,或者后面几分<br>
     * @param time (指定时间)
     * @param minutes (正数表示后面几分,负数表示前面几分)
     * @return String
     * @author Administrator
     */
    public String getTimeAddMinute(String time ,int minutes)
    {
        if(time.split(":").length == 3)
        {
            setTime(time);
            return  addTimeAll(Calendar.MINUTE,minutes);
        }else
        {
            return "时间格式为hh:mm:ss 你输入的有误!" ;
        }
    }
    /**
     * 功能:得到指定时间的前面,或者后面几小时<br>
     * @param time (指定时间)
     * @param hours (正数表示后面几小时,负数表示前面几小时)
     * @return String
     * @author Administrator
     */
    public String getTimeAddHour(String time ,int hours)
    {
        if(time.split(":").length == 3)
        {
            setTime(time);
            return  addTimeAll(Calendar.HOUR,hours);
        }else
        {
            return "日期格式为YYYY-MM-DD 你输入的有误!" ;
        }
    }
    /**
     * 功能:得到两个指定时间的时间差<br>
     * @param startTime 开始时间
     * @param endTime  结束时间
     * @return minusTime 时间差
     * @author Administrator
     */
    public String getTimeMinus(String startTime, String endTime)
    {
        String minusTime = null;
        if((startTime.split(":").length == 3) && (endTime.split(":").length == 3))
        {
         int time[] = null;
         if(startTime.compareTo(endTime)<0)
            {
          time = getTotalTime(startTime,endTime);
          minusTime = "+ " + getTotalTimeFormat(time[0],time[1],time[2]);
            }else
            {
             time = getTotalTime(endTime,startTime);
             minusTime = "- " + getTotalTimeFormat(time[0],time[1],time[2]);
            }
            return minusTime ;
        }else
        {
            return "日期格式为YYYY-MM-DD 你输入的有误!" ;
        }
    }
    /***
     *
     * 功能:得到两个指定日期的时间差 天数<br>
     *
     * @param startDate
     * @param endDate
     * @return
     * @author Administrator
     */
    public int getDateMinus(String startDate, String endDate)
    {
        int index = 0 ;
        if(startDate.compareTo(endDate)<0)
        {
         while( !getDateAddDay(startDate,index).equals( endDate))
         {      
             index += 1;
         }
        }else
        {
         while( !getDateAddDay(endDate,index).equals( startDate))
         {      
             index += 1;
         }
         index = -index;
        }
        return index;
    }
    /***
     * 返回传入的日期之间的所包含天数 List
     * @param startDate
     * @param endDate
     * @return
     */
    public ArrayList getDateMinusList(String startDate, String endDate)
    {
        int index = 0 ;
        ArrayList arrayDays = new ArrayList();
        if(startDate.compareTo(endDate)<0)
        {
         while( !getDateAddDay(startDate,index).equals( endDate))
         {      
          arrayDays.add(getDateAddDay(startDate,index));
          index += 1;
         }
         arrayDays.remove(0);
        }else
        {
         while( !getDateAddDay(endDate,index).equals( startDate))
         {      
          arrayDays.add(getDateAddDay(endDate,index));
          index += 1;
         }
         arrayDays.remove(0);
        }
        return arrayDays;
    }
    /**
     *
     * 功能:将从数据库中得到的时间差转换为标准的XX天XX小时XX分XX秒<br>
     *
     * @param DBTimeMinus
     * @return String formatDBTime
     * @author Administrator
     */
    public String getDBTimeMinus(String DBTimeMinus)
    {
        String formatDBTime = null ;
        double DBtime  = 0 ;
        try
        {
            DBtime = Double.parseDouble(DBTimeMinus);
        }catch(Exception e)
        {
            return "你输入的参数有误!" ;
        }
        int days = 0 ;
        int hours = 0 ;
        int minutes = 0 ;
        int seconds = 0 ;
        double x = 0 ;
        double y = 0 ;
        x = DBtime ;
        y = Math.floor(x);
        days = (int)y ;
        x = (x - y) * 24 ;           
        y = Math.floor(x);
        hours = (int)y ;
        x = (x - y) * 60 ;           
        y = Math.floor(x);
        minutes = (int)y ;
        x = (x - y) * 60 ;           
        y = Math.floor(x);
        seconds = (int)y ;
        formatDBTime = days + "天" + hours + "小时" + minutes + "分" + "" + seconds + "秒" ;
        return formatDBTime ;
    }
    /**
     *
     * 功能:将从数据库中得到的时间差转换为标准的XX天XX小时XX分XX秒<br>
     *
     * @param DBTimeMinus
     * @return String formatDBTime
     * @author Administrator
     */
    public String getDBTimeMinus(double DBTimeMinus)
    {
        String formatDBTime = null ;
        formatDBTime = getDBTimeMinus(String.valueOf(DBTimeMinus));
        return formatDBTime ;
    }
    /**
     *  功能 :给增加时间的方法提供支持
     *  @param  calendarProperty Calendar的各个属性
     *  @return String
     */
    private String addTimeAll(int calendarProperty, int property)
    {
        String strY = null;
        String strZ = null;
        localTime.add(calendarProperty,property);
        x = localTime.get(Calendar.HOUR);
        y = localTime.get(Calendar.MINUTE); 
        z = localTime.get(Calendar.SECOND);
        strY = y >= 10 ? String.valueOf(y) : ("0" + y) ;
        strZ = z >= 10 ? String.valueOf(z) : ("0" + z) ;
        return  x + ":" + strY + ":" + strZ;
    }
    /**
     *  功能 :给增加日期的方法提供支持
     *  @param  calendarProperty Calendar的各个属性
     *  @return String
     */
    private String addDateAll(int calendarProperty, int property)
    {
        String strY = null;
        String strZ = null;
        localTime.add(calendarProperty,property);
        x = localTime.get(Calendar.YEAR);
        y = localTime.get(Calendar.MONTH) + 1; 
        z = localTime.get(Calendar.DATE);
        strY = y >= 10 ? String.valueOf(y) : ("0" + y) ;
        strZ = z >= 10 ? String.valueOf(z) : ("0" + z) ;
        return  x + "-" + strY + "-" + strZ;
    }
    /**
     * 将获得的总的时间(小时,分钟,秒)数转换为String格式
     * @param hour int
     * @param minute int
     * @param second int
     * @return totalTime String
     */
    private String getTotalTimeFormat(int hour ,int minute, int second)
    {
        int nHour = 0;
        int nHourIn = 0;
        int nMinute = 0;
        int nMinuteIn = 0;
        int nSecond = 0;
        /*********************秒数 格式化*********************/
        if(second > 0 && second <60)
        {
            nSecond = second;
        }else
        {
            if(second < 0 )
            {
                nSecond = second%60 + 60 ;
                nMinuteIn = second/60 - 1 ;
            }
            if(second > 60 )
            {
                nSecond = second%60 ;
                nMinuteIn= second/60 ;
            }
        }
        /****************分 格式化**************************/
        if(nMinuteIn + minute > 0 && nMinuteIn + minute < 60)
        {
            nMinute = nMinuteIn + minute;
        }else
        {
            if(nMinuteIn+minute < 0)
            {
                nMinute = (nMinuteIn + minute)%60 + 60;
                nHourIn = (nMinuteIn + minute)/60 - 1 ;
            }
            if(nMinuteIn+minute > 60)
            {
                nMinute = (nMinuteIn + minute)%60 ;
                nHourIn = (nMinuteIn + minute)/60 ;
            }
        }
        /******************小时 格式化*************************/
        nHour = hour + nHourIn ;
       
        return nHour + "小时" + nMinute + "分钟"+nSecond + "秒";
    }
    /**
     * 获得时间差函数,即小时,分,秒的TotalTime
     * @param startTime String
     * @param endTime String
     * @return total int[]
     */
    private  int[] getTotalTime(String startTime , String endTime)
    {
        int[] total = new int[3];
           
        String timeOut [] = endTime.split(":") ;      
        String timeIn [] = startTime.split(":") ;
        for(int i = 0 ; i < 3 ; i++)
        {
           total[i] = Integer.parseInt(timeOut[i]) - Integer.parseInt(timeIn[i]);
        }    
        return total ;
    }
 /**
  * 日期转换 在 String ,Date ,Calendar之间相互转换
  *
  * @param obj  传入的需要转换的对象(String ,Date, Calendar)
  * @param toObj 需要转换成的对象 (String.class,Date.class,Calendar.class)
  * @return returnObject (返回的对象强制转换成与 toObj 一致)
  */
    public Object convert(Object obj, Class toObj)
    {
     Object returnObject = null;
     if(obj instanceof String)
     {
      if(((String)obj).split("-").length == 3)
      {
       if(toObj == Calendar.class)
       {
           setDate(obj.toString());
           returnObject = localTime;
       }
       if(toObj == Date.class)
       {
        setDate(obj.toString());
        returnObject = localTime.getTime();
       }
      }else
      {
       returnObject = "日期格式为YYYY-MM-DD 你输入的有误!";
      }
     } 
     if(obj instanceof Calendar)
     {
      if(toObj == String.class)
      {
             localTime = (Calendar)obj;
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
       returnObject = simpleDateFormat.format(localTime.getTime());
      }
      if(toObj == Date.class)
      {
       localTime = (Calendar)obj;
       returnObject = localTime.getTime();
      }
     }
     if(obj instanceof Date)
     {
      if(toObj == Calendar.class)
      {
          localTime.setTime((Date)obj);
          returnObject = localTime;
      }
      if(toObj == String.class)
      {
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
       returnObject = simpleDateFormat.format((Date)obj);
      }
     }
  return returnObject;
    }
    public static void main(String[] args)
    {
       //System.out.println( new ZrarDateTime().getDateMinus("2006-06-06","2009-06-09"));
       //System.out.println(new ZrarDateTime().getLocalDateTimeWeek());
//     String origin = "2009-06-06";
//     Date date = (Date)new ZrarDateTime().convert(origin,Date.class);
//     String strDate = (String)new ZrarDateTime().convert(date,String.class);
//     Calendar calDate = (Calendar)new ZrarDateTime().convert(strDate,Calendar.class);
//     date = (Date)new ZrarDateTime().convert(calDate,Date.class);
//     strDate = (String)new ZrarDateTime().convert(date,String.class);
//     System.out.println(strDate);
//     System.out.println(new ZrarDateTime().getLocalDateTime());
//     System.out.println(new ZrarDateTime().getLocalDateTimeWeek());
//     System.out.println(new ZrarDateTime().convert(new Date(),String.class));
//     System.out.println(new ZrarDateTime().getDateMinus("2002-09-06","2006-06-06"));
//     System.out.println(new ZrarDateTime().convert(new Date(),String.class));
     System.out.println(new ZrarDateTime().getDateMinusList("2006-06-13","2006-06-12"));
     
    }
}

你可能感兴趣的:(jdk)