java中經常使用的時間方法

package com.accp.office.util; 




import java.text.DateFormat; 
import java.text.ParsePosition; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 


public class TimeUtil { 
 //用來全局控制 上一週,本週,下一週的週數變化 
    private  static int weeks = 0; 
    private static int MaxDate;//一月最大天數 
    private static int MaxYear;//一年最大天數 
  
    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
/** 
* 獲取每月的最後一天不帶時分秒 
* @author 呂兵陽 
* @return 
*/ 
public static Date getLastDayOfMonth(Calendar cal){ 
String lastDay = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
try { 
return sdf.parse(lastDay); 
} catch (Exception e) { 
e.printStackTrace(); 
System.out.println("獲取當前時間失敗!"); 
return null; 
} 
} 
/** 
* 獲取一個月的第一天不帶時分秒 
* @author 呂兵陽 
* @param cal 
* @return 
*/ 
public static Date getFirstDayOfMonth(Calendar cal) { 
String firstDay = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+01; 
try { 
return sdf.parse(firstDay); 
} catch (Exception e) { 
e.printStackTrace(); 
System.out.println("獲取當前時間失敗!"); 
return null; 
} 
} 
/** 
* 獲取今天不帶時分秒 
* @author 呂兵陽 
* @param cal 
* @return 
*/ 
public static Date getTime(Calendar cal){ 
String now = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DAY_OF_MONTH);
try { 
return sdf.parse(now); 
} catch (Exception e) { 
e.printStackTrace(); 
System.out.println("獲取時間失敗!"); 
return null; 
} 
} 
/** 
* 獲取明天不帶時分秒 
* @author 呂兵陽 
* @param cal 
* @return 
*/ 
public static Date getTomorrow(Calendar cal){ 
String tomorrow = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+(cal.get(Calendar.DAY_OF_MONTH)+2); 
try { 
return sdf.parse(tomorrow); 
} catch (Exception e) { 
e.printStackTrace(); 
System.out.println("獲取時間出錯!"); 
return null; 
} 
} 

/** 
 * 將一個字符串轉換爲一個日期對象 
 * @description 
 * @author  呂兵陽 
 * @param strDate 
 * @return 
 */ 
 public static Date strToDate(String strDate) { 
     SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
     ParsePosition pos = new ParsePosition(0); 
     Date strtodate = formatter.parse(strDate, pos); 
     return strtodate; 
 } 
 /** 
* 獲取兩個時間相差的天數 
* @description 
* @author  呂兵陽 
* @param sj1 時間1 
* @param sj2 時間2 
* @return 
*/ 
 public static long getDays(String date1, String date2) { 
     if (date1 == null || date1.equals("")) 
      return 0; 
     if (date2 == null || date2.equals("")) 
      return 0; 
     // 轉換爲標準時間 
     SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 
     java.util.Date date = null; 
     java.util.Date mydate = null; 
     try { 
      date = myFormatter.parse(date1); 
      mydate = myFormatter.parse(date2); 
     } catch (Exception e) { 
     } 
     long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); 
     return day; 
 } 
 /** 
  * 獲取當月最後一天,返回日期的字符串 
  * @description 
  * @author  呂兵陽 
  * @return 
  */ 
 public static String getLastDayofMonth(){  
    String str = ""; 
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    
    Calendar lastDate = Calendar.getInstance(); 
    lastDate.set(Calendar.DATE,1);//設爲當前月的1號 
    lastDate.add(Calendar.MONTH,1);//加一個月,變爲下月的1號 
    lastDate.add(Calendar.DATE,-1);//減去一天,變爲當月最後一天 
    str=sdf.format(lastDate.getTime()); 
    return str;  
 } 
  
 /** 
  * 獲取上個月第一天,返回標準的日期字符串 
  * @description 
  * @author  呂兵陽 
  * @return 
  */ 
 public static String getPreviousMonthFirst(){  
    String str = ""; 
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    


    Calendar lastDate = Calendar.getInstance(); 
    lastDate.set(Calendar.DATE,1);//設爲當前月的1號 
    lastDate.add(Calendar.MONTH,-1);//減一個月,變爲下月的1號 
    //lastDate.add(Calendar.DATE,-1);//減去一天,變爲當月最後一天 
    
    str=sdf.format(lastDate.getTime()); 
    return str;  
 } 
  
  /** 
  * 獲取本週週日的日期,返回標準的日期字符串 
  * @description 
  * @author  呂兵陽 
  * @return 
  */ 
    public static String getCurrentWeekday() { 
        weeks = 0; 
        int mondayPlus = getMondayPlus(); 
        GregorianCalendar currentDate = new GregorianCalendar(); 
        currentDate.add(GregorianCalendar.DATE, mondayPlus+6); 
        Date monday = currentDate.getTime(); 
        
        DateFormat df = DateFormat.getDateInstance(); 
        String preMonday = df.format(monday); 
        return preMonday; 
    } 
    
    
    /** 
     * 得到當前日期與本週日相差的天數 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    private static int getMondayPlus() { 
        Calendar cd = Calendar.getInstance(); 
        // 得到今天是一週的第幾天,星期日是第一天,星期二是次日...... 
        int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1;   //由於按中國禮拜一做爲第一天因此這裏減1 
        if (dayOfWeek == 1) { 
            return 0; 
        } else { 
            return 1 - dayOfWeek; 
        } 
    } 
    
    /** 
     * 得到本週一的日期 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    public static String getMondayOFWeek(){ 
      weeks = 0; 
         int mondayPlus = getMondayPlus(); 
         GregorianCalendar currentDate = new GregorianCalendar(); 
         currentDate.add(GregorianCalendar.DATE, mondayPlus); 
         Date monday = currentDate.getTime(); 
         
         DateFormat df = DateFormat.getDateInstance(); 
         String preMonday = df.format(monday); 
         return preMonday; 
    } 
    
  /** 
   * 得到相應周的週六的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getSaturday() { 
        int mondayPlus = getMondayPlus(); 
        GregorianCalendar currentDate = new GregorianCalendar(); 
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 5); 
        Date monday = currentDate.getTime(); 
        DateFormat df = DateFormat.getDateInstance(); 
        String preMonday = df.format(monday); 
        return preMonday; 
    } 
    
    /** 
     * 得到上週星期日的日期 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    public static String getPreviousWeekSunday() { 
     weeks=0; 
        weeks--; 
        int mondayPlus =getMondayPlus(); 
        GregorianCalendar currentDate = new GregorianCalendar(); 
        currentDate.add(GregorianCalendar.DATE, mondayPlus+weeks); 
        Date monday = currentDate.getTime(); 
        DateFormat df = DateFormat.getDateInstance(); 
        String preMonday = df.format(monday); 
        return preMonday; 
    } 


    /** 
     * 得到上週星期一的日期 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    public static String getPreviousWeekday() { 
        weeks--; 
        int mondayPlus =getMondayPlus(); 
        GregorianCalendar currentDate = new GregorianCalendar(); 
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks); 
        Date monday = currentDate.getTime(); 
        DateFormat df = DateFormat.getDateInstance(); 
        String preMonday = df.format(monday); 
        return preMonday; 
    } 
    
    /** 
     * 得到下週星期一的日期 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    public static String getNextMonday() { 
        weeks++; 
        int mondayPlus = getMondayPlus(); 
        GregorianCalendar currentDate = new GregorianCalendar(); 
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7); 
        Date monday = currentDate.getTime(); 
        DateFormat df = DateFormat.getDateInstance(); 
        String preMonday = df.format(monday); 
        return preMonday; 
    } 
    
 /** 
  * 得到下週星期日的日期 
  * @description 
  * @author  呂兵陽 
  * @return 
  */ 
    public static String getNextSunday() { 
        
        int mondayPlus =getMondayPlus(); 
        GregorianCalendar currentDate = new GregorianCalendar(); 
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7+6); 
        Date monday = currentDate.getTime(); 
        DateFormat df = DateFormat.getDateInstance(); 
        String preMonday = df.format(monday); 
        return preMonday; 
    } 
    
   /** 
    * 月份的計算 
    * @description 
    * @author  呂兵陽 
    * @return 
    */ 
    private static int getMonthPlus(){ 
     Calendar cd = Calendar.getInstance(); 
     int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH); 
     cd.set(Calendar.DATE, 1);//把日期設置爲當月第一天 
     cd.roll(Calendar.DATE, -1);//日期回滾一天,也就是最後一天 
     MaxDate=cd.get(Calendar.DATE); 
     if(monthOfNumber == 1){ 
      return -MaxDate; 
     }else{ 
      return 1-monthOfNumber; 
     } 
    } 
    
  /** 
   * 得到上月最後一天的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getPreviousMonthEnd(){ 
     String str = ""; 
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    


     Calendar lastDate = Calendar.getInstance(); 
    lastDate.add(Calendar.MONTH,-1);//減一個月 
    lastDate.set(Calendar.DATE, 1);//把日期設置爲當月第一天 
    lastDate.roll(Calendar.DATE, -1);//日期回滾一天,也就是本月最後一天 
     str=sdf.format(lastDate.getTime()); 
     return str;  
    } 
    
  /** 
   * 得到下個月第一天的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getNextMonthFirst(){ 
     String str = ""; 
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    


     Calendar lastDate = Calendar.getInstance(); 
    lastDate.add(Calendar.MONTH,1);//減一個月 
    lastDate.set(Calendar.DATE, 1);//把日期設置爲當月第一天 
     str=sdf.format(lastDate.getTime()); 
     return str;  
    } 
    
  /** 
   * 得到下個月最後一天的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getNextMonthEnd(){ 
     String str = ""; 
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    
     Calendar lastDate = Calendar.getInstance(); 
    lastDate.add(Calendar.MONTH,1);//加一個月 
    lastDate.set(Calendar.DATE, 1);//把日期設置爲當月第一天 
    lastDate.roll(Calendar.DATE, -1);//日期回滾一天,也就是本月最後一天 
     str=sdf.format(lastDate.getTime()); 
     return str;  
    } 
    
    /** 
     * 得到明年最後一天的日期 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    public String getNextYearEnd(){ 
     String str = ""; 
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    


    Calendar lastDate = Calendar.getInstance(); 
    lastDate.add(Calendar.YEAR,1);//加一個年 
    lastDate.set(Calendar.DAY_OF_YEAR, 1); 
   lastDate.roll(Calendar.DAY_OF_YEAR, -1); 
     str=sdf.format(lastDate.getTime()); 
     return str;  
    } 
    
  /** 
   * 得到明年第一天的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public String getNextYearFirst(){ 
     String str = ""; 
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    


     Calendar lastDate = Calendar.getInstance(); 
     lastDate.add(Calendar.YEAR,1);//加一個年 
     lastDate.set(Calendar.DAY_OF_YEAR, 1); 
           str=sdf.format(lastDate.getTime()); 
     return str;  
      
    } 
    
  /** 
   * 得到本年有多少天 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static int getMaxYear(){ 
     Calendar cd = Calendar.getInstance(); 
     cd.set(Calendar.DAY_OF_YEAR,1);//把日期設爲當年第一天 
     cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滾一天。 
     int MaxYear = cd.get(Calendar.DAY_OF_YEAR);  
     return MaxYear; 
    } 
     
    public static int getYearPlus(){ 
     Calendar cd = Calendar.getInstance(); 
     int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);//得到當天是一年中的第幾天 
     cd.set(Calendar.DAY_OF_YEAR,1);//把日期設爲當年第一天 
     cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滾一天。 
     int MaxYear = cd.get(Calendar.DAY_OF_YEAR); 
     if(yearOfNumber == 1){ 
      return -MaxYear; 
     }else{ 
      return 1-yearOfNumber; 
     } 
    } 
    /** 
     * 得到本年第一天的日期 
     * @description 
     * @author  呂兵陽 
     * @return 
     */ 
    public static String getCurrentYearFirst(){ 
     int yearPlus = getYearPlus(); 
     GregorianCalendar currentDate = new GregorianCalendar(); 
     currentDate.add(GregorianCalendar.DATE,yearPlus); 
     Date yearDay = currentDate.getTime(); 
     DateFormat df = DateFormat.getDateInstance(); 
     String preYearDay = df.format(yearDay); 
     return preYearDay; 
    } 
    
    
  /** 
   * 得到本年最後一天的日期  
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getCurrentYearEnd(){ 
     Date date = new Date(); 
  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//能夠方便地修改日期格式   
  String  years  = dateFormat.format(date);   
  return years+"-12-31"; 
    } 
    
    
  /** 
   * 得到上年第一天的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getPreviousYearFirst(){ 
     Date date = new Date(); 
  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//能夠方便地修改日期格式   
  String  years  = dateFormat.format(date); int years_value = Integer.parseInt(years);  
  years_value--; 
  return years_value+"-1-1"; 
    } 
    
  /** 
   * 得到上年最後一天的日期 
   * @description 
   * @author  呂兵陽 
   * @return 
   */ 
    public static String getPreviousYearEnd(){ 
     weeks--; 
     int yearPlus =getYearPlus(); 
     GregorianCalendar currentDate = new GregorianCalendar(); 
     currentDate.add(GregorianCalendar.DATE,yearPlus+MaxYear*weeks+(MaxYear-1)); 
     Date yearDay = currentDate.getTime(); 
     DateFormat df = DateFormat.getDateInstance(); 
     String preYearDay = df.format(yearDay); 
     getThisSeasonTime(11); 
     return preYearDay; 
    } 
    
  /** 
   * 得到季度的開始日期和結束日期 
   * @description 
   * @author  呂兵陽 
   * @param month 
   * @return 
   */ 
 public static String getThisSeasonTime(int month){ 
  int array[][] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; 
  int season = 1; 
  if(month>=1&&month<=3){ 
   season = 1; 
  } 
  if(month>=4&&month<=6){ 
   season = 2; 
  } 
  if(month>=7&&month<=9){ 
   season = 3; 
  } 
  if(month>=10&&month<=12){ 
   season = 4; 
  } 
  int start_month = array[season-1][0]; 
  int end_month = array[season-1][2]; 
   
  Date date = new Date(); 
  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//能夠方便地修改日期格式   
  String  years  = dateFormat.format(date);   
  int years_value = Integer.parseInt(years); 
   
  int start_days =1;//years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month); 
  int end_days = getLastDayOfMonth(years_value,end_month); 
  String seasonDate = years_value+"-"+start_month+"-"+start_days+";"+years_value+"-"+end_month+"-"+end_days; 
  return seasonDate; 
   
 } 
  
  
   private static int getLastDayOfMonth(int year, int month) { 
         if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 
                   || month == 10 || month == 12) { 
               return 31; 
         } 
         if (month == 4 || month == 6 || month == 9 || month == 11) { 
               return 30; 
         } 
         if (month == 2) { 
               if (isLeapYear(year)) { 
                   return 29; 
               } else { 
                   return 28; 
               } 
         } 
         return 0; 
   } 
   
  public static boolean isLeapYear(int year) { 
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); 
  } 
} 
 @Test
    public void test4(){
    	logger.info("兩個時間相差幾天:"+TimeUtil.getDays("2013-10-10", "2013-10-09"));
    	logger.info("你輸入的字符串轉換爲日期後是:"+TimeUtil.strToDate("2013-12-6"));
    	logger.info("當月最後一天:"+TimeUtil.getLastDayofMonth());
    	logger.info("上個月第一天:"+TimeUtil.getPreviousMonthFirst());
    	logger.info("本週週日的日期是:"+TimeUtil.getCurrentWeekday());
    	logger.info("本週一的日期:"+TimeUtil.getMondayOFWeek());
    	logger.info("得到相應周的週六的日期:"+TimeUtil.getSaturday());
    	logger.info("得到上週星期日的日期:"+TimeUtil.getPreviousWeekSunday());
    	logger.info("得到上週星期一的日期:"+TimeUtil.getPreviousWeekday());
    	logger.info("得到下週星期一的日期:"+TimeUtil.getNextMonday());
    	logger.info("得到下週星期日的日期:"+TimeUtil.getNextSunday());
    	logger.info("本年有:"+TimeUtil.getMaxYear()+"天!");
    	logger.info("季度的開始和結束:"+TimeUtil.getThisSeasonTime(1));
    }
相關文章
相關標籤/搜索