Java常用日期操作封装了

fmms 13年前

/**   * all rights reserved by zhanqiong, 2005   */  package com.koubei.util;    import java.text.DateFormat;  import java.text.ParseException;  import java.text.SimpleDateFormat;  import java.util.ArrayList;  import java.util.Calendar;  import java.util.Date;  import java.util.List;    /**   * @author chen   *    */  public class DateUtil {      /**    * 日    */   public final static int INTERVAL_DAY = 1;   /**    * 周    */   public final static int INTERVAL_WEEK = 2;   /**    * 月    */   public final static int INTERVAL_MONTH = 3;   /**    * 年    */   public final static int INTERVAL_YEAR = 4;   /**    * 小时    */   public final static int INTERVAL_HOUR = 5;   /**    * 分钟    */   public final static int INTERVAL_MINUTE = 6;   /**    * 秒    */   public final static int INTERVAL_SECOND = 7;       /**    * date = 1901-01-01    */   public final static Date tempDate=new Date(new Long("-2177481952000"));;     /**    * 测试是否是当天    *     * @param date - 某一日期    * @return true-今天, false-不是    */   @SuppressWarnings("deprecation")   public static boolean isToday(Date date) {    Date now = new Date();    boolean result = true;    result &= date.getYear()==now.getYear();    result &= date.getMonth()==now.getMonth();    result &= date.getDate()==now.getDate();    return result;   }     /**    * 两个日期相减,取天数    *     * @param date1    * @param date2    * @return    */   public static long DaysBetween(Date date1, Date date2) {    if (date2 == null)     date2 = new Date();    long day = (date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000);    return day;   }     /**    * 比较两个日期 if date1<=date2 return true    *     * @param date1    * @param date2    * @return    */   public static boolean compareDate(String date1, String date2) {    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     Date d1 = format.parse(date1);     Date d2 = format.parse(date2);     return !d1.after(d2);    } catch (ParseException e) {     e.printStackTrace();     return false;    }   }     /**    * 字符型转换成日期型    *     * @param date    * @param dateFormat    * @return    */   public static Date dateFormat(String date, String dateFormat) {    if (date == null)     return null;    SimpleDateFormat format = new SimpleDateFormat(dateFormat);    if (date != null) {     try {      return format.parse(date);     } catch (Exception ex) {     }    }    return null;   }           /**    * 使用默认格式 yyyy-MM-dd HH:mm:ss    * @author Robin Chang    * @param date    * @return    */   public static Date dateFormat(String date)   {    return dateFormat(date,"yyyy-MM-dd HH:mm:ss");   }     /**    * 日期型转换成字符串    *     * @param date    * @param dateFormat    * @return    */   public static String dateFormat(Date date, String dateFormat) {    if (date == null)     return "";    SimpleDateFormat format = new SimpleDateFormat(dateFormat);    if (date != null) {     return format.format(date);    }    return "";   }      /**       * 由于生日增加保密属性,现决定1900为保密对应值,如果遇到1900的年份,则隐掉年份       *        * @param date       * @param dateFormat       * @return 不保密显示1981-12-01保密则显示`12-01       */      public static String birthdayFormat(Date date) {          if (date == null)              return "";          SimpleDateFormat format = null;          if(date.before(tempDate)) {              format = new SimpleDateFormat("MM-dd");          }else {              format = new SimpleDateFormat("yyyy-MM-dd");                 }          if (date != null) {              return format.format(date);          }          return "";      }         /**    * 使用默认格式 yyyy-MM-dd HH:mm:ss    * @param date    * @return    */   public static String dateFormat(Date date)   {    return dateFormat(date,"yyyy-MM-dd HH:mm:ss");   }        public static boolean isExpiredDay(Date date1) {    long day = (new Date().getTime() - date1.getTime()) / (24 * 60 * 60 * 1000);    if (day >= 1)     return true;    else     return false;   }     public static Date getYesterday() {    Date date = new Date();    long time = (date.getTime() / 1000) - 60 * 60 * 24;    date.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     date = format.parse(format.format(date));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return date;   }     public static Date getWeekAgo() {    Date date = new Date();    long time = (date.getTime() / 1000) - 7 * 60 * 60 * 24;    date.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     date = format.parse(format.format(date));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return date;   }     public static String getDaysAgo(int interval) {    Date date = new Date();    long time = (date.getTime() / 1000) - interval * 60 * 60 * 24;    date.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     return format.format(date);    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return "";   }     public static Date getTomorrow() {    Date date = new Date();    long time = (date.getTime() / 1000) + 60 * 60 * 24;    date.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     date = format.parse(format.format(date));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return date;   }          public static Date getBeforeDate(String range) {    Calendar today = Calendar.getInstance();    if ("week".equalsIgnoreCase(range))     today.add(Calendar.WEEK_OF_MONTH, -1);    else if ("month".equalsIgnoreCase(range))     today.add(Calendar.MONTH, -1);    else     today.clear();    return today.getTime();   }     public static Date getThisWeekStartTime() {    Calendar today = Calendar.getInstance();    today.set(Calendar.DAY_OF_WEEK, today.getFirstDayOfWeek());    Calendar weekFirstDay = Calendar.getInstance();    weekFirstDay.clear();    weekFirstDay.set(Calendar.YEAR, today.get(Calendar.YEAR));    weekFirstDay.set(Calendar.MONTH, today.get(Calendar.MONTH));    weekFirstDay.set(Calendar.DATE, today.get(Calendar.DATE));    return weekFirstDay.getTime();   }     public static String getToday(String format) {    String result = "";    try {     Date today = new Date();     SimpleDateFormat simpleFormat = new SimpleDateFormat(format);     result = simpleFormat.format(today);    } catch (Exception e) {    }    return result;   }     public static Date getStartDay(int year, int month) {    Calendar today = Calendar.getInstance();    today.clear();    today.set(Calendar.YEAR, year);    today.set(Calendar.MONTH, month - 1);    today.set(Calendar.DAY_OF_MONTH, 1);    return today.getTime();   }     public static List<Integer> getBeforeYearList(int before) {    Calendar today = Calendar.getInstance();    int theYear = today.get(Calendar.YEAR);    List<Integer> list = new ArrayList<Integer>();    for (int i = before; i >= 0; i--)     list.add(theYear - i);      return list;   }      /**    * 增加时间    * @param interval [INTERVAL_DAY,INTERVAL_WEEK,INTERVAL_MONTH,INTERVAL_YEAR,INTERVAL_HOUR,INTERVAL_MINUTE]    * @param date    * @param n 可以为负数    * @return    */   public static Date dateAdd(int interval,Date date,int n)   {    long time = (date.getTime() / 1000); //单位秒    switch(interval)    {     case INTERVAL_DAY:      time = time + n * 86400;//60 * 60 * 24;      break;     case INTERVAL_WEEK:      time = time + n * 604800;//60 * 60 * 24 * 7;      break;     case INTERVAL_MONTH:      time = time + n * 2678400;//60 * 60 * 24 * 31;      break;     case INTERVAL_YEAR:      time = time + n * 31536000;//60 * 60 * 24 * 365;      break;     case INTERVAL_HOUR:      time = time + n * 3600;//60 * 60 ;      break;     case INTERVAL_MINUTE:      time = time + n * 60;      break;     case INTERVAL_SECOND:      time = time + n;      break;     default:    }        Date result = new Date();    result.setTime(time * 1000);    return result;   }      /**    * 计算两个时间间隔    * @param interval [INTERVAL_DAY,INTERVAL_WEEK,INTERVAL_MONTH,INTERVAL_YEAR,INTERVAL_HOUR,INTERVAL_MINUTE]    * @param begin    * @param end    * @return    */   public static int dateDiff(int interval,Date begin,Date end)   {    long beginTime = (begin.getTime() / 1000); //单位:秒    long endTime = (end.getTime() / 1000); //单位: 秒    long tmp = 0;    if (endTime == beginTime)    {     return 0;    }      //确定endTime 大于 beginTime 结束时间秒数 大于 开始时间秒数    if (endTime < beginTime)    {     tmp = beginTime;     beginTime = endTime;     endTime = tmp;    }        long intervalTime = endTime - beginTime;    long result = 0;    switch(interval)    {     case INTERVAL_DAY:      result = intervalTime / 86400;//60 * 60 * 24;      break;     case INTERVAL_WEEK:      result = intervalTime / 604800;//60 * 60 * 24 * 7;      break;     case INTERVAL_MONTH:      result = intervalTime / 2678400;//60 * 60 * 24 * 31;      break;     case INTERVAL_YEAR:      result = intervalTime / 31536000;//60 * 60 * 24 * 365;      break;     case INTERVAL_HOUR:      result = intervalTime / 3600;//60 * 60 ;      break;     case INTERVAL_MINUTE:      result = intervalTime / 60;      break;     case INTERVAL_SECOND:      result = intervalTime / 1;      break;     default:    }          //做过交换    if (tmp > 0)    {     result = 0 - result;    }    return (int) result;   }       /**    * 当前年份    * @return    */   public static int getTodayYear()   {    int yyyy = Integer.parseInt(dateFormat(new Date(),"yyyy"));    return yyyy;   }       public static Date getNow()   {    return new Date();   }      /**    * 把日期格式为rss格式兼容的字符串    * @param date    * @return    */   public static String dateFormatRss(Date date)   {    if (date != null)    {     return dateFormat(date,"E, d MMM yyyy H:mm:ss") + " GMT";    }    return "";   }      /**    * 判断当前日期是否在两个日期之间    * @param startDate 开始时间    * @param endDate 结束时间    * @return     */   public static boolean betweenStartDateAndEndDate(Date startDate,Date endDate){    boolean bool=false;    Date curDate=new Date();    if (curDate.after(startDate) && curDate.before(DateUtil.dateAdd( INTERVAL_DAY ,endDate,1)) ){     bool=true;    }    return bool;       }      /**    * 判断当前时间是否在在两个时间之间    * @param startDate 开始时间    * @param endDate 结束时间    * @return     */   public static boolean nowDateBetweenStartDateAndEndDate(Date startDate,Date endDate){    boolean bool=false;    Date curDate=new Date();    if (curDate.after(startDate) && curDate.before(endDate)){     bool=true;    }    return bool;   }      /**    * 判断当前时间是否在date之后    * @param date    * @return     */   public static boolean nowDateAfterDate(Date date){    boolean bool=false;    Date curDate=new Date();    if (curDate.after(date)){     bool=true;    }    return bool;   }         /**    * 判断二个日期相隔的天数,结束时间为null时,,取当前时间    * @param startDate 开始时间    * @param endDate 结束时间    * @return     */   public static int getBetweenTodaysStartDateAndEndDate(Date startDate,Date endDate){    int betweentoday = 0;    if(startDate==null){     return betweentoday;    }    if(endDate==null){     Calendar calendar = Calendar.getInstance();     String year = new Integer(calendar.get(Calendar.YEAR)).toString();     String month = new Integer((calendar.get(calendar.MONTH)+1)).toString();     String day =  new Integer(calendar.get(calendar.DAY_OF_MONTH)).toString();     String strtodaytime = year+"-"+month+"-"+day;     DateFormat  formatter=new SimpleDateFormat("yyyy-MM-dd");        try {      endDate = formatter.parse(strtodaytime);     } catch (ParseException e) {      //TODO Auto-generated catch block      e.printStackTrace();     }    }        if(endDate.after(startDate)){     betweentoday =  (int)((endDate.getTime() -startDate.getTime())/86400000);    }else{     betweentoday =  (int)((startDate.getTime() -endDate.getTime())/86400000);    }    return betweentoday;   }       /**          *   取得指定长度日期时间字符串{不含格式}              @param   format   时间格式由常量决定              8:  YYMMDDHH            8位           10: YYMMDDHHmm          10位        12: YYMMDDHHmmss        12位        14: YYYYMMDDHHmmss      14位        15: YYMMDDHHmmssxxx     15位   (最后的xxx   是毫秒)          */    public   static  String  getTime(int  format){             StringBuffer   cTime=new   StringBuffer(10);             Calendar   time=Calendar.getInstance();             int   miltime=time.get(Calendar.MILLISECOND);             int   second=time.get(Calendar.SECOND);             int   minute=time.get(Calendar.MINUTE);             int   hour=time.get(Calendar.HOUR_OF_DAY);             int   day   =time.get(Calendar.DAY_OF_MONTH);             int   month=time.get(Calendar.MONTH)+1;             int   year   =time.get(Calendar.YEAR);             if(format!=14){                     if(year>=2000)   year=year-2000;                     else   year=year-1900;             }             if(format>=2){                     if(format==14)   cTime.append(year);                     else         cTime.append(getFormatTime(year,2));             }             if(format>=4)                     cTime.append(getFormatTime(month,2));             if(format>=6)                     cTime.append(getFormatTime(day,2));             if(format>=8)                     cTime.append(getFormatTime(hour,2));             if(format>=10)                     cTime.append(getFormatTime(minute,2));             if(format>=12)                     cTime.append(getFormatTime(second,2));             if(format>=15)                     cTime.append(getFormatTime(miltime,3));             return   cTime.toString();      }        /**          * 产生任意位的字符串          *   @param   time   要转换格式的时间          *   @param   format 转换的格式          *   @return String   转换的时间          */    private  static  String  getFormatTime(int  time,int   format){               StringBuffer   numm=new   StringBuffer();               int   length=String.valueOf(time).length();             if(format<length)   return   null;            for(int   i=0   ;i<format-length   ;i++){                       numm.append("0");               }               numm.append(time);               return   numm.toString().trim();        }            /**    * 根据生日去用户年龄    * @param birthday    * @return int    * @exception    * @author     豆皮    * @Date       Apr 24, 2008    */   public static int getUserAge(Date birthday){     if(birthday == null) return 0;     Calendar cal = Calendar.getInstance();        if(cal.before(birthday)) {         return 0;     }     int yearNow = cal.get(Calendar.YEAR);     cal.setTime(birthday);// 给时间赋值     int yearBirth = cal.get(Calendar.YEAR);     return yearNow - yearBirth;   }        /**       * 将int型时间(1970年至今的秒数)转换成Date型时间       * @param unixTime 1970年至今的秒数       * @return        * @author     郑卿       */      public static Date getDateByUnixTime(int unixTime){          return new Date(unixTime*1000L);      }            /**       * 将Date型时间转换成int型时间(1970年至今的秒数)       * @param unixTime 1970年至今的秒数       * @return        * @author     郑卿       */      public static int getUnixTimeByDate(Date date){          return (int)(date.getTime()/1000);      }        public static void main(String[] args) {       Date date1 =dateFormat("1981-01-01 00:00:00");       Date date2 =dateFormat("1900-12-31 00:00:00");       System.out.println(birthdayFormat(date1));          System.out.println(birthdayFormat(date2));   }   public static Date getNextDay(Date date) {    long time = (date.getTime() / 1000) + 60 * 60 * 24;    date.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     date = format.parse(format.format(date));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return date;     }     /**    * @param date    * @return    * 复制新Date,不改变参数    */   public static Date nextDay(Date date) {    Date newDate = (Date) date.clone();    long time = (newDate.getTime() / 1000) + 60 * 60 * 24;    newDate.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     newDate = format.parse(format.format(newDate));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return newDate;     }     @SuppressWarnings("unused")   public static Date getNowTime() {    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date date = new Date();    String dateStr = dateFormat(date);    try {     date = format.parse(dateStr);    } catch (ParseException e) {     e.printStackTrace();    }    return date;   }     public static Date getTomorrow(Date date1) {      // 创建当前时间对象    Calendar now = Calendar.getInstance();    now.setTime(date1);    // 日期[+1]day    now.add(Calendar.DATE, 1);    return now.getTime();   }     public static Date getWeekAgo(Date date) {    Date newDate = (Date) date.clone();    long time = (newDate.getTime() / 1000) - 60 * 60 * 24 * 7;    newDate.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     newDate = format.parse(format.format(newDate));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return newDate;   }     public static Date getDatebyTime(Date date, int n) {    String str = DateUtil.dateFormat(date, "yyyy-MM-dd");    String[] strs = str.split("-");    int month = Integer.parseInt(strs[1]);    int monthnow = (month + n) % 12;    int year = Integer.parseInt(strs[0]) + (month + n) / 12;    str = String.valueOf(year) + "-" + String.valueOf(monthnow) + "-"      + strs[2];    return DateUtil.dateFormat(str, "yyyy-MM-dd");   }     /**    * @param date    * @return    * 复制新Date,不改变参数    */   public static Date yesterday(Date date) {    Date newDate = (Date) date.clone();    long time = (newDate.getTime() / 1000) - 60 * 60 * 24;    newDate.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     newDate = format.parse(format.format(newDate));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return newDate;   }     public static Date getYesterday(Date date) {    long time = (date.getTime() / 1000) - 60 * 60 * 24;    date.setTime(time * 1000);    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    try {     date = format.parse(format.format(date));    } catch (Exception ex) {     System.out.println(ex.getMessage());    }    return date;   }     private static SimpleDateFormat format = null;   @SuppressWarnings("unused")   public static String getStringNowTime() {    format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date date = new Date();    String dateStr = dateFormat(date);      return dateStr;   }         /**       * 指定时间的秒数       * 指定时间零点的秒数加指定天数的秒数       * @param time 时间       * @param range  天       * @return       */      public static long getSpecifyTimeSec(long time,int range){       Date date    = new Date((time*1000+(23-Calendar.ZONE_OFFSET)*3600000)/86400000*86400000-(23-Calendar.ZONE_OFFSET)*3600000);          long zeroTime   = date.getTime()/1000;       long specifyTime  = range * 24 * 3600;       return (zeroTime+specifyTime);      }            /**       * 将int型时间(1970年至今的秒数)转换成指定格式的时间       *        * @param unixTime 1970年至今的秒数       * @param dateFormat 时间格式       * @return        * @author  sky       */      public static String formatDateByUnixTime(long unixTime, String dateFormat){          return dateFormat(new Date(unixTime*1000), dateFormat);      }     }