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));
    }


你可能感兴趣的:(java中常用的时间方法)