日期处理

来源:互联网 发布:linux启动kde 编辑:程序博客网 时间:2024/05/23 10:33
java(日期处理)
第一部分关于JAVA的Date (参考关于JAVA的Date总结)

Java代码  

1.计算某一月份的最大天数    

Calendar time=Calendar.getInstance();    time.clear();    time.set(Calendar.YEAR,2012); //year 为 int    time.set(Calendar.MONTH,1);//注意,Calendar对象默认一月为0              int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数   

结果2012年2月是29天

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间    


2.Calendar和Date的转化    
  
(1) Calendar转化为Date 

Calendar cal=Calendar.getInstance();Date date=cal.getTime();

(2) Date转化为Calendar  

Date date = new Date();Calendar cal = Calendar.getInstance();    cal.setTime(date); 

3.格式化输出日期时间 (这个用的比较多)  

Date date = new Date();    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    String time = df.format(date);    System.out.println(time); 

4.计算一年中的第几星期    
  
(1)计算某一天是一年中的第几星期  

Calendar cal=Calendar.getInstance(); 
cal.clear();   cal.set(Calendar.YEAR, 2012);    cal.set(Calendar.MONTH,9);    cal.set(Calendar.DAY_OF_MONTH, 5);    int weekno=cal.get(Calendar.WEEK_OF_YEAR); 

40

(2)计算一年中的第几星期是几号   

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");    Calendar cal=Calendar.getInstance();cal.set(Calendar.YEAR, 2006);    cal.set(Calendar.WEEK_OF_YEAR, 1);    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    System.out.println(df.format(cal.getTime()));   

输出:    
2006-01-02    


5.add()和roll()的用法(不太常用)   

(1)add()方法   

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");      
Calendar cal=Calendar.getInstance();      cal.set(Calendar.YEAR, 2012);      cal.set(Calendar.MONTH,9);      cal.set(Calendar.DAY_OF_MONTH, 5);      cal.add(Calendar.DATE, -4);      Date date = cal.getTime();      System.out.println(df.format(date));      cal.add(Calendar.DATE, -14);      date = cal.getTime();      System.out.println(df.format(date));

输出:    
 2012-10-01
 2012-09-17
(2)roll方法   

cal.set(Calendar.YEAR, 2006);    cal.set(Calendar.MONTH,8);    cal.set(Calendar.DAY_OF_MONTH, 3);    cal.roll(Calendar.DATE, -4);    date=cal.getTime();    System.out.println(df.format(date));    cal.roll(Calendar.DATE, 4);    date=cal.getTime();    System.out.println(df.format(date)); 

输出:        2006-09-29        2006-09-03    可见,roll()方法在本月内循环,一般使用add()方法;      6.计算两个任意时间中间的间隔天数(这个比较常用)

(1)传进Calendar对象  

 public int getIntervalDays(Calendar startday,Calendar endday)...{                  if(startday.after(endday))...{                Calendar cal=startday;                startday=endday;                endday=cal;            }               long sl=startday.getTimeInMillis();            long el=endday.getTimeInMillis();                      long ei=el-sl;                      return (int)(ei/(1000*60*60*24));        }    

(2)传进Date对象    


 

public int getIntervalDays(Date startday,Date endday)...{                   if(startday.after(endday))...{                Date cal=startday;                startday=endday;                endday=cal;            }                   long sl=startday.getTime();            long el=endday.getTime();                  long ei=el-sl;                      return (int)(ei/(1000*60*60*24));        }    


(3)改进精确计算相隔天数的方法    
  
  public int getDaysBetween (Calendar d1,Calendar d2) ...{            if (d1.after(d2)) ...{                java.util.Calendar swap = d1;                d1 = d2;                d2 = swap;            }            int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);            int y2 = d2.get(Calendar.YEAR);            if (d1.get(Calendar.YEAR) != y2) ...{                d1 = (Calendar) d1.clone();                do ...{                    days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数                    d1.add(Calendar.YEAR, 1);                } while (d1.get(Calendar.YEAR) != y2);            }            return days;        }    


注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配 最好装化成 long去比较    
如:1年前日期(注意毫秒的转换)    
  
 java.util.Date myDate=new java.util.Date();       long myTime=(myDate.getTime()/1000)-60*60*24*365;       myDate.setTime(myTime*1000);       String mDate=formatter.format(myDate);    


  
7. String 和 Date ,Long 之间相互转换 (最常用)    
  
字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)    
通常我们取时间跨度的时候,会substring出具体时间--long-比较    
  
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);    java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");    long dvalue=d.getTime();    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    String mDateTime1=formatter.format(d);    


  
8. 通过时间求时间    
  
年月周求日期    
>
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");    java.util.Date date2= formatter2.parse("2003-05 5 星期五");    SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");    String mydate2=formatter3.format(date2);    


  
求是星期几    
mydate= myFormatter.parse("2001-1-1");    SimpleDateFormat formatter4 = new SimpleDateFormat("E");    String mydate3=formatter4.format(mydate);    


  
9. java 和 具体的数据库结合    
  
在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver 数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型    
你可以使用dateFormat定义时间日期的格式,转一个字符串即可    
  
class Datetest{    
*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)    
*@param dateString 需要转换为timestamp的字符串    
*@return dataTime timestamp    
  
public final static java.sql.Timestamp string2Time(String dateString)    
throws java.text.ParseException {    
DateFormat dateFormat;    
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式    
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);    
dateFormat.setLenient(false);    
java.util.Date timeDate = dateFormat.parse(dateString);//util类型    
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型    
return dateTime;    
}    
  
*method 将字符串类型的日期转换为一个Date(java.sql.Date)    
*@param dateString 需要转换为Date的字符串    
*@return dataTime Date    
  
public final static java.sql.Date string2Date(String dateString)    
throws java.lang.Exception {    
DateFormat dateFormat;    
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);    
dateFormat.setLenient(false);    
java.util.Date timeDate = dateFormat.parse(dateString);//util类型    
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型    
return dateTime;    
}    
  
public static void main(String[] args){    
Date da = new Date();    
注意:这个地方da.getTime()得到的是一个long型的值    
System.out.println(da.getTime());    
  
由日期date转换为timestamp    
  
第一种方法:使用new Timestamp(long)    
Timestamp t = new Timestamp(new Date().getTime());    
/>System.out.println(t);    
  
第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)    
Timestamp tt = new Timestamp(Calendar.getInstance().get(    
      Calendar.YEAR) - 1900, Calendar.getInstance().get(    
      Calendar.MONTH), Calendar.getInstance().get(    
      Calendar.DATE), Calendar.getInstance().get(    
      Calendar.HOUR), Calendar.getInstance().get(    
      Calendar.MINUTE), Calendar.getInstance().get(    
      Calendar.SECOND), 0);    
System.out.println(tt);    
  
try {    
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串    
      String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串    
      Date date1 = string2Date(sToDate);    
      Timestamp date2 = string2Time(sToTimestamp);    
System.out.println("Date:"+date1.toString());//结果显示    
System.out.println("Timestamp:"+date2.toString());//结果显示    
}catch(Exception e) {    
e.printStackTrace();    
}    
}    
}   


1.计算某一月份的最大天数 


Calendar time=Calendar.getInstance(); 
time.clear(); 
time.set(Calendar.YEAR,year); //year 为 int 
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0           
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 
注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间 


2.Calendar和Date的转化 


(1) Calendar转化为Date 
Calendar cal=Calendar.getInstance(); 
Date date=cal.getTime(); 


(2) Date转化为Calendar 
Date date=new Date(); 
Calendar cal=Calendar.getInstance(); 
cal.setTime(date); 


3.格式化输出日期时间 (这个用的比较多) 


Date date=new Date(); 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
String time=df.format(date); 
System.out.println(time); 


4.计算一年中的第几星期 


(1)计算某一天是一年中的第几星期 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH,; 
cal.set(Calendar.DAY_OF_MONTH, 3); 
int weekno=cal.get(Calendar.WEEK_OF_YEAR); 


(2)计算一年中的第几星期是几号 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.WEEK_OF_YEAR, 1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(df.format(cal.getTime())); 
输出: 
2006-01-02 


5.add()和roll()的用法(不太常用) 


(1)add()方法 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH,; 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.add(Calendar.DATE, -4); 
Date date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.add(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
输出: 
    2006-08-30 
    2006-09-03 
(2)roll方法 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH,; 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.roll(Calendar.DATE, -4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.roll(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 




输出: 
    2006-09-29 
    2006-09-03 
可见,roll()方法在本月内循环,一般使用add()方法; 


6.计算两个任意时间中间的间隔天数(这个比较常用) 
(1)传进Calendar对象 
    public int getIntervalDays(Calendar startday,Calendar endday)...{       
        if(startday.after(endday))...{ 
            Calendar cal=startday; 
            startday=endday; 
            endday=cal; 
        }    
        long sl=startday.getTimeInMillis(); 
        long el=endday.getTimeInMillis(); 
       
        long ei=el-sl;           
        return (int)(ei/(1000*60*60*24)); 
    } 
(2)传进Date对象 


    public int getIntervalDays(Date startday,Date endday)...{        
        if(startday.after(endday))...{ 
            Date cal=startday; 
            startday=endday; 
            endday=cal; 
        }        
        long sl=startday.getTime(); 
        long el=endday.getTime();       
        long ei=el-sl;           
        return (int)(ei/(1000*60*60*24)); 
    } 
(3)改进精确计算相隔天数的方法 
    public int getDaysBetween (Calendar d1,Calendar d2) ...{ 
        if (d1.after(d2)) ...{ 
            java.util.Calendar swap = d1; 
            d1 = d2; 
            d2 = swap; 
        } 
        int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); 
        int y2 = d2.get(Calendar.YEAR); 
        if (d1.get(Calendar.YEAR) != y2) ...{ 
            d1 = (Calendar) d1.clone(); 
            do ...{ 
                days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数 
                d1.add(Calendar.YEAR, 1); 
            } while (d1.get(Calendar.YEAR) != y2); 
        } 
        return days; 
    } 
注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配 最好装化成 long去比较 
如:1年前日期(注意毫秒的转换) 
   java.util.Date myDate=new java.util.Date(); 
   long myTime=(myDate.getTime()/1000)-60*60*24*365; 
   myDate.setTime(myTime*1000); 
   String mDate=formatter.format(myDate); 


7. String 和 Date ,Long 之间相互转换 (最常用) 


字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可) 
通常我们取时间跨度的时候,会substring出具体时间--long-比较 


java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US); 
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM"); 
long dvalue=d.getTime(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String mDateTime1=formatter.format(d); 


8. 通过时间求时间 


年月周求日期 
>SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E"); 
java.util.Date date2= formatter2.parse("2003-05 5 星期五"); 
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd"); 
String mydate2=formatter3.format(date2); 


求是星期几 
mydate= myFormatter.parse("2001-1-1"); 
SimpleDateFormat formatter4 = new SimpleDateFormat("E"); 
String mydate3=formatter4.format(mydate); 


9. java 和 具体的数据库结合 


在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver 数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型 
你可以使用dateFormat定义时间日期的格式,转一个字符串即可 


class Datetest{ *method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp) *@param dateString 需要转换为timestamp的字符串 *@return dataTime timestamp public final static java.sql.Timestamp string2Time(String dateString) throws java.text.ParseException { DateFormat dateFormat; dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式 //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH); dateFormat.setLenient(false); java.util.Date timeDate = dateFormat.parse(dateString);//util类型 java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型 return dateTime; } *method 将字符串类型的日期转换为一个Date(java.sql.Date) *@param dateString 需要转换为Date的字符串 *@return dataTime Date public final static java.sql.Date string2Date(String dateString) throws java.lang.Exception { DateFormat dateFormat; dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); dateFormat.setLenient(false); java.util.Date timeDate = dateFormat.parse(dateString);//util类型 java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型 return dateTime; } public static void main(String[] args){ Date da = new Date(); //注意:这个地方da.getTime()得到的是一个long型的值 System.out.println(da.getTime()); 




由日期date转换为timestamp 


第一种方法:使用new Timestamp(long) 
Timestamp t = new Timestamp(new Date().getTime()); System.out.println(t); 




第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano) 
Timestamp tt = new Timestamp(Calendar.getInstance().get(       Calendar.YEAR) - 1900, Calendar.getInstance().get(       Calendar.MONTH), Calendar.getInstance().get(       Calendar.DATE), Calendar.getInstance().get(       Calendar.HOUR), Calendar.getInstance().get(       Calendar.MINUTE), Calendar.getInstance().get(       Calendar.SECOND), 0); System.out.println(tt); try { String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串       String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串       Date date1 = string2Date(sToDate);       Timestamp date2 = string2Time(sToTimestamp); System.out.println("Date:"+date1.toString());//结果显示 System.out.println("Timestamp:"+date2.toString());//结果显示 }catch(Exception e) { e.printStackTrace(); } } } 


 


第二部分Date工具类(参考一个总结好的很好的关于JAVA的Date工具类)


 


Java代码  
public class DateUtil      {          //默认显示日期的格式          public static final String DATAFORMAT_STR = "yyyy-MM-dd";                    //默认显示日期的格式          public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM";                    //默认显示日期时间的格式          public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss";                    //默认显示简体中文日期的格式          public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日";                    //默认显示简体中文日期时间的格式          public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH时mm分ss秒";                    //默认显示简体中文日期时间的格式          public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH时mm分";                    private static DateFormat dateFormat = null;                    private static DateFormat dateTimeFormat = null;                    private static DateFormat zhcnDateFormat = null;                    private static DateFormat zhcnDateTimeFormat = null;          static         {              dateFormat = new SimpleDateFormat(DATAFORMAT_STR);              dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR);              zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR);              zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR);          }                    private static DateFormat getDateFormat(String formatStr)          {              if (formatStr.equalsIgnoreCase(DATAFORMAT_STR))              {                  return dateFormat;              }              else                 if (formatStr.equalsIgnoreCase(DATATIMEF_STR))                  {                      return dateTimeFormat;                  }                  else                     if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR))                      {                          return zhcnDateFormat;                      }                      else                         if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR))                          {                              return zhcnDateTimeFormat;                          }                          else                         {                              return new SimpleDateFormat(formatStr);                          }          }                    /**         * 按照默认显示日期时间的格式"yyyy-MM-dd HH:mm:ss",转化dateTimeStr为Date类型         * dateTimeStr必须是"yyyy-MM-dd HH:mm:ss"的形式         * @param dateTimeStr         * @return         */         public static Date getDate(String dateTimeStr)          {              return getDate(dateTimeStr, DATATIMEF_STR);          }                    /**         * 按照默认formatStr的格式,转化dateTimeStr为Date类型         * dateTimeStr必须是formatStr的形式         * @param dateTimeStr         * @param formatStr         * @return         */         public static Date getDate(String dateTimeStr, String formatStr)          {              try             {                  if (dateTimeStr == null || dateTimeStr.equals(""))                  {                      return null;                  }                  DateFormat sdf = getDateFormat(formatStr);                  java.util.Date d = sdf.parse(dateTimeStr);                  return d;              }              catch (ParseException e)              {                  throw new RuntimeException(e);              }          }                    /**         * 将YYYYMMDD转换成Date日期         * @param date         * @return         * @throws BusinessException         */         public static Date transferDate(String date) throws Exception          {              if (date == null || date.length() < 1)                  return null;                            if (date.length() != 8)                  throw new Exception("日期格式错误");              String con = "-";                            String yyyy = date.substring(0, 4);              String mm = date.substring(4, 6);              String dd = date.substring(6, 8);                            int month = Integer.parseInt(mm);              int day = Integer.parseInt(dd);              if (month < 1 || month > 12 || day < 1 || day > 31)                  throw new Exception("日期格式错误");                            String str = yyyy + con + mm + con + dd;              return DateUtil.getDate(str, DateUtil.DATAFORMAT_STR);          }                    /**         * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串         * @param date         * @return         */         public static String getYYYYMMDDDate(Date date)          {              if (date == null)                  return null;              String yyyy = getYear(date) + "";              String mm = getMonth(date) + "";              String dd = getDay(date) + "";                            mm = StringUtil.rightAlign(mm, 2, "0");              dd = StringUtil.rightAlign(dd, 2, "0");              return yyyy + mm + dd;          }                    /**         * 将YYYY-MM-DD日期转换成YYYYMMDDHHMMSS格式字符串         * @param date         * @return         */         public static String getYYYYMMDDHHMMSSDate(Date date)          {              if (date == null)                  return null;              String yyyy = getYear(date) + "";              String mm = getMonth(date) + "";              String dd = getDay(date) + "";              String hh = getHour(date) + "";              String min = getMin(date) + "";              String ss = getSecond(date) + "";                            mm = StringUtil.rightAlign(mm, 2, "0");              dd = StringUtil.rightAlign(dd, 2, "0");              hh = StringUtil.rightAlign(hh, 2, "0");              min = StringUtil.rightAlign(min, 2, "0");              ss = StringUtil.rightAlign(ss, 2, "0");                            return yyyy + mm + dd + hh + min + ss;          }                    /**         * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串         * @param date         * @return         */         public static String getYYYYMMDDDate(String date)          {              return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR));          }                    /**         * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串         * @param date         * @return         */         public static String dateToDateString(Date date)          {              return dateToDateString(date, DATATIMEF_STR);          }                    /**         * 将Date转换成formatStr格式的字符串         * @param date         * @param formatStr         * @return         */         public static String dateToDateString(Date date, String formatStr)          {              DateFormat df = getDateFormat(formatStr);              return df.format(date);          }                    /**         * 返回一个yyyy-MM-dd HH:mm:ss 形式的日期时间字符串中的HH:mm:ss         * @param dateTime         * @return         */         public static String getTimeString(String dateTime)          {              return getTimeString(dateTime, DATATIMEF_STR);          }                    /**         * 返回一个formatStr格式的日期时间字符串中的HH:mm:ss         * @param dateTime         * @param formatStr         * @return         */         public static String getTimeString(String dateTime, String formatStr)          {              Date d = getDate(dateTime, formatStr);              String s = dateToDateString(d);              return s.substring(DATATIMEF_STR.indexOf('H'));          }                    /**         * 获取当前日期yyyy-MM-dd的形式         * @return         */         public static String getCurDate()          {              //return dateToDateString(new Date(),DATAFORMAT_STR);              return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR);          }                    /**         * 获取当前日期yyyy年MM月dd日的形式         * @return         */         public static String getCurZhCNDate()          {              return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR);          }                    /**         * 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式         * @return         */         public static String getCurDateTime()          {              return dateToDateString(new Date(), DATATIMEF_STR);          }                    /**         * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式         * @return         */         public static String getCurZhCNDateTime()          {              return dateToDateString(new Date(), ZHCN_DATATIMEF_STR);          }                    /**         * 获取日期d的days天后的一个Date         * @param d         * @param days         * @return         */         public static Date getInternalDateByDay(Date d, int days)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              now.add(Calendar.DATE, days);              return now.getTime();          }                    public static Date getInternalDateByMon(Date d, int months)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              now.add(Calendar.MONTH, months);              return now.getTime();          }                    public static Date getInternalDateByYear(Date d, int years)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              now.add(Calendar.YEAR, years);              return now.getTime();          }                    public static Date getInternalDateBySec(Date d, int sec)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              now.add(Calendar.SECOND, sec);              return now.getTime();          }                    public static Date getInternalDateByMin(Date d, int min)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              now.add(Calendar.MINUTE, min);              return now.getTime();          }                    public static Date getInternalDateByHour(Date d, int hours)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              now.add(Calendar.HOUR_OF_DAY, hours);              return now.getTime();          }                    /**         * 根据一个日期字符串,返回日期格式,目前支持4种         * 如果都不是,则返回null         * @param DateString         * @return         */         public static String getFormateStr(String DateString)          {              String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; //"yyyy-MM-dd"              String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; //"yyyy-MM-dd HH:mm:ss";              String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日"              String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}时[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH时mm分ss秒"                            Pattern p = Pattern.compile(patternStr1);              Matcher m = p.matcher(DateString);              boolean b = m.matches();              if (b)                  return DATAFORMAT_STR;              p = Pattern.compile(patternStr2);              m = p.matcher(DateString);              b = m.matches();              if (b)                  return DATATIMEF_STR;                            p = Pattern.compile(patternStr3);              m = p.matcher(DateString);              b = m.matches();              if (b)                  return ZHCN_DATAFORMAT_STR;                            p = Pattern.compile(patternStr4);              m = p.matcher(DateString);              b = m.matches();              if (b)                  return ZHCN_DATATIMEF_STR;              return null;          }                    /**         * 将一个"yyyy-MM-dd HH:mm:ss"字符串,转换成"yyyy年MM月dd日HH时mm分ss秒"的字符串         * @param dateStr         * @return         */         public static String getZhCNDateTime(String dateStr)          {              Date d = getDate(dateStr);              return dateToDateString(d, ZHCN_DATATIMEF_STR);          }                    /**         * 将一个"yyyy-MM-dd"字符串,转换成"yyyy年MM月dd日"的字符串         * @param dateStr         * @return         */         public static String getZhCNDate(String dateStr)          {              Date d = getDate(dateStr, DATAFORMAT_STR);              return dateToDateString(d, ZHCN_DATAFORMAT_STR);          }                    /**         * 将dateStr从fmtFrom转换到fmtTo的格式         * @param dateStr         * @param fmtFrom         * @param fmtTo         * @return         */         public static String getDateStr(String dateStr, String fmtFrom, String fmtTo)          {              Date d = getDate(dateStr, fmtFrom);              return dateToDateString(d, fmtTo);          }                    /**         * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1         * @param time1         * @param time2         * @return         */         public static long compareDateStr(String time1, String time2)          {              Date d1 = getDate(time1);              Date d2 = getDate(time2);              return d2.getTime() - d1.getTime();          }                    /**         * 将小时数换算成返回以毫秒为单位的时间         * @param hours         * @return         */         public static long getMicroSec(BigDecimal hours)          {              BigDecimal bd;              bd = hours.multiply(new BigDecimal(3600 * 1000));              return bd.longValue();          }                    /**         * 获取Date中的分钟         * @param d         * @return         */         public static int getMin(Date d)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              return now.get(Calendar.MINUTE);          }                    /**         * 获取Date中的小时(24小时)         * @param d         * @return         */         public static int getHour(Date d)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              return now.get(Calendar.HOUR_OF_DAY);          }                    /**         * 获取Date中的秒         * @param d         * @return         */         public static int getSecond(Date d)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              return now.get(Calendar.SECOND);          }                    /**         * 获取xxxx-xx-xx的日         * @param d         * @return         */         public static int getDay(Date d)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              return now.get(Calendar.DAY_OF_MONTH);          }                    /**         * 获取月份,1-12月         * @param d         * @return         */         public static int getMonth(Date d)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              return now.get(Calendar.MONTH) + 1;          }                    /**         * 获取19xx,20xx形式的年         * @param d         * @return         */         public static int getYear(Date d)          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              now.setTime(d);              return now.get(Calendar.YEAR);          }                    /**         * 得到d的上个月的年份+月份,如200505         * @return         */         public static String getYearMonthOfLastMon(Date d)          {              Date newdate = getInternalDateByMon(d, -1);              String year = String.valueOf(getYear(newdate));              String month = String.valueOf(getMonth(newdate));              return year + month;          }                    /**         * 得到当前日期的年和月如200509         * @return String         */         public static String getCurYearMonth()          {              Calendar now = Calendar.getInstance(TimeZone.getDefault());              String DATE_FORMAT = "yyyyMM";              java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);              sdf.setTimeZone(TimeZone.getDefault());              return (sdf.format(now.getTime()));          }                    public static Date getNextMonth(String year, String month)          {              String datestr = year + "-" + month + "-01";              Date date = getDate(datestr, DATAFORMAT_STR);              return getInternalDateByMon(date, 1);          }                    public static Date getLastMonth(String year, String month)          {              String datestr = year + "-" + month + "-01";              Date date = getDate(datestr, DATAFORMAT_STR);              return getInternalDateByMon(date, -1);          }                    /**         * 得到日期d,按照页面日期控件格式,如"2001-3-16"         * @param d         * @return         */         public static String getSingleNumDate(Date d)          {              return dateToDateString(d, DATAFORMAT_STR);          }                    /**         * 得到d半年前的日期,"yyyy-MM-dd"         * @param d         * @return         */         public static String getHalfYearBeforeStr(Date d)          {              return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR);          }                    /**         * 得到当前日期D的月底的前/后若干天的时间,<0表示之前,>0表示之后         * @param d         * @param days         * @return         */         public static String getInternalDateByLastDay(Date d, int days)          {                            return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR);          }                    /**         * 日期中的年月日相加         *  @param field int  需要加的字段  年 月 日         * @param amount int 加多少         * @return String         */         public static String addDate(int field, int amount)          {              int temp = 0;              if (field == 1)              {                  temp = Calendar.YEAR;              }              if (field == 2)              {                  temp = Calendar.MONTH;              }              if (field == 3)              {                  temp = Calendar.DATE;              }                            String Time = "";              try             {                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");                  Calendar cal = Calendar.getInstance(TimeZone.getDefault());                  cal.add(temp, amount);                  Time = sdf.format(cal.getTime());                  return Time;              }              catch (Exception e)              {                  e.printStackTrace();                  return null;              }                        }                    /**         * 获得系统当前月份的天数         * @return         */         public static int getCurentMonthDay()          {              Date date = Calendar.getInstance().getTime();              return getMonthDay(date);          }                    /**         * 获得指定日期月份的天数         * @return         */         public static int getMonthDay(Date date)          {              Calendar c = Calendar.getInstance();              c.setTime(date);              return c.getActualMaximum(Calendar.DAY_OF_MONTH);                        }                    /**         * 获得指定日期月份的天数  yyyy-mm-dd         * @return         */         public static int getMonthDay(String date)          {              Date strDate = getDate(date, DATAFORMAT_STR);              return getMonthDay(strDate);                        }                    public static String getStringDate(Calendar cal)          {                            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");              return format.format(cal.getTime());          }                    /**         * @param args         */         public static void main(String[] args)          {              //      //System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss"));              //      System.out.print("\n"+DateUtil.getCurZhCNDateTime());              //      System.out.print("\n"+getFormateStr(DateUtil.getCurDate()));              //      System.out.print("\n"+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3"));              //      System.out.print("\n"+getDay(new Date()));              //      System.out.print("\n"+getMonth(new Date()));              //      System.out.print("\n"+getYear(new Date()));              //      System.out.print("\n"+getMin(new Date()));              ////        System.out.print("\n"+new Date().getSeconds());              /*Date d1 = new Date(2007,11,30);            Date d2 = new Date(2007,12,1);            if(d2.compareTo(d1)>0){                System.out.println("d2大于d1");            }else{                System.out.println("d2小于d1");            }*/                  System.out.println(addDate(1, 1));              System.out.println(addDate(2, 1));              System.out.println(addDate(3, 1));                            System.out.println(getYYYYMMDDHHMMSSDate(new Date()));                            System.out.println(getCurentMonthDay());                        }                }