日期处理

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



   

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值