import java.sql.Time;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


import org.apache.http.impl.cookie.DateUtils;


 


public class DateTest {

private final static String CHINESE_DATE_FORMAT = "yyyy年 MM月 dd日";
private final static String CHINESE_TIME_FORMAT = "HH时 mm分 ss秒";
private final static String CHINESE_DATETIME_FORMAT = "yyyy年 MM月 dd日,HH时 mm分 ss秒";
private final static String CHINESE_DATETIME_MILLIS_FORMAT = "yyyy年 MM月 dd日,HH时 mm分 ss秒.SSS";
private final static String COMMON_DATE_FORMAT = "yyyyMMdd";
private final static String COMMON_TIME_FORMAT = "HH:mm:ss";
private final static String COMMON_DATETIME_FORMAT = "yyyyMMdd HH:mm:ss";
private final static String COMMON_DATETIME_MILLIS_FORMAT = "yyyyMMdd HH:mm:ss.SSS";
private final static String DASH_DATE_FORMAT = "yyyy-MM-dd";
private final static String DASH_TIME_FORMAT = "HH:mm:ss";
private final static String DASH_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private final static String DASH_DATETIME_MILLIS_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
private final static String SLASH_DATE_FORMAT = "yyyy/MM/dd";
private final static String SLASH_TIME_FORMAT = "HH:mm:ss";
private final static String SLASH_DATETIME_FORMAT = "yyyy/MM/dd HH:mm:ss";
private final static String SLASH_DATETIME_MILLIS_FORMAT = "yyyy/MM/dd HH:mm:ss.SSS";

public static Date parse(String dateStr, String pattern){
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setLenient(false);

try {
date =  sdf.parse(dateStr);
} catch (ParseException e) {  
e.printStackTrace();
}

return date;
}
public static String format(Date date, String pattern){
String dateStr = null;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setLenient(false);

dateStr =  sdf.format(date);
return dateStr;
}
/**
* 获取两个时间之间相差的秒数
*  
* @param begin 开始时间
* @param end 结束时间  

* @return Date 返回新的时间
*/
public static int getIntevalsBySecond(Date begin , Date end){ 
return getIntevalsOfDates(Calendar.SECOND, begin, end);
}
/**
* 获取两个时间之间相差的分钟数
*  
* @param begin 开始时间
* @param end 结束时间  

* @return Date 返回新的时间
*/
public static int getIntevalsByMinute(Date begin , Date end){ 
return getIntevalsOfDates(Calendar.MINUTE, begin, end);
}
/**
* 获取两个时间之间相差的小时数
*  
* @param begin 开始时间
* @param end 结束时间  

* @return Date 返回新的时间
*/
public static int getIntevalsByHour(Date begin , Date end){ 
return getIntevalsOfDates(Calendar.HOUR, begin, end);
}
/**
* 获取两个时间之间相差的天数
*  
* @param begin 开始时间
* @param end 结束时间  

* @return Date 返回新的时间
*/
public static int getIntevalsByDay(Date begin , Date end){ 
return getIntevalsOfDates(Calendar.DATE, begin, end);
}
/**
* 获取两个时间之间相差的月数
*  
* @param begin 开始时间
* @param end 结束时间  

* @return Date 返回新的时间
*/
public static int getIntevalsByMonth(Date begin , Date end){ 
return getIntevalsOfDates(Calendar.MONTH, begin, end);
}
/**
* 获取两个时间之间相差的年数
*  
* @param begin 开始时间
* @param end 结束时间  

* @return Date 返回新的时间
*/
public static int getIntevalsByYear(Date begin , Date end){ 
return getIntevalsOfDates(Calendar.YEAR, begin, end);
}
/**
* 为一个时间增加指定的分钟数,当增加后的小时数超过最大值或小于最小值则滚动上级;
* 采用24小时表示方式
* @param date 要修改的时间
* @param months  要增加的分钟数,负数则是减去指定的分钟数

* @return Date 返回新的时间
*/
public static Date addSeconds(Date date , int seconds){ 
return add(date, Calendar.SECOND, seconds);
}
/**
* 为一个时间增加指定的分钟数,当增加后的天数超过最大值或小于最小值则滚动上级;
*  
* @param date 要修改的时间
* @param months 要增加的分钟数,负数则是减去指定的分钟数

* @return Date 返回新的时间
*/
public static Date rollSeconds(Date date , int seconds){ 
return add(date, Calendar.SECOND, seconds);
}
 
/**
* 为一个时间增加指定的分钟数,当增加后的小时数超过最大值或小于最小值则滚动上级;
* 采用24小时表示方式
* @param date 要修改的时间
* @param months  要增加的分钟数,负数则是减去指定的分钟数

* @return Date 返回新的时间
*/
public static Date addMinutes(Date date , int minutes){ 
return add(date, Calendar.MINUTE, minutes);
}
/**
* 为一个时间增加指定的分钟数,当增加后的天数超过最大值或小于最小值则滚动上级;
*  
* @param date 要修改的时间
* @param months 要增加的分钟数,负数则是减去指定的分钟数

* @return Date 返回新的时间
*/
public static Date rollMinutes(Date date , int minutes){ 
return add(date, Calendar.MINUTE, minutes);
}
/**
* 为一个时间增加指定的小时数,当增加后的小时数超过最大值或小于最小值则滚动上级;
*  
* @param date 要修改的时间
* @param months  要增加的分钟数,负数则是减去指定的分钟数

* @return Date 返回新的时间
*/
public static Date addHours(Date date , int hours){ 
return add(date, Calendar.DAY_OF_MONTH, hours);
}
/**
* 为一个时间增加指定的月数,当增加后的天数超过最大值或小于最小值则滚动上级;
* 采用24小时表示方式
* @param date 要修改的时间
* @param months 要增加的小时数,负数则是减去指定的小时数

* @return Date 返回新的时间
*/
public static Date rollHours(Date date , int hours){ 
return add(date, Calendar.HOUR_OF_DAY, hours);
}



/**
* 为一个时间增加指定的月数,当增加后的天数超过最大值或小于最小值则滚动年月;

* @param date 要修改的时间
* @param months 要增加的天数,负数则是减去指定的天数

* @return Date 返回新的时间
*/
public static Date addDays(Date date , int days){ 
return add(date, Calendar.DAY_OF_MONTH, days);
}

/**
* 为一个时间增加指定的月数,仅仅滚动月,

* @param date 要修改的时间
* @param months 要增加的天数,负数则是减去指定的天数

* @return Date 返回新的时间
*/
public static Date rollDays(Date date , int days){ 
return roll(date, Calendar.DAY_OF_MONTH, days);
}

/**
* 为一个时间增加指定的月数,当增加后的月数超过最大月或小于最小月则滚动年;
* @param date 要修改的时间
* @param months 要增加的月数,负数则是减去指定的月数
* @return Date 返回新的时间
*/
public static Date addMonths(Date date , int months){ 
return add(date, Calendar.MONTH, months);
}

/**
* 为一个时间增加指定的月数,仅仅滚动月,

* @param date 要修改的时间
* @param months 要增加的月数,负数则是减去指定的月数

* @return Date 返回新的时间
*/
public static Date rollMonths(Date date , int months){ 
return  roll(date, Calendar.MONTH, months);
}
/**
* 增加或减去日期中指定单位上的时间,同时会滚动更大单位上的时间

* @param date 要修改的时间
* @param field @see Calender
* @param units 单位数

* @return Date 返回新的时间
*/
protected static Date add(Date date, int field, int units){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(field, units);
return calendar.getTime();
}
/**
* 增加或减去日期中指定单位上的时间,但不修改更大单位上的时间,仅仅滚动本单位上的时间

* @param date 要修改的时间
* @param field @see Calender
* @param units 单位数

* @return Date 返回新的时间
*/
protected static Date roll(Date date, int field, int units){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.roll(field, units);
return calendar.getTime();
}

protected static int getIntevalsOfDates(int field, Date begin, Date end){
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.setTime(begin);
calendar2.setTime(end);

long intervals = calendar1.getTimeInMillis() - calendar2.getTimeInMillis();

int ret = 0;
switch (field) {
case Calendar.YEAR: 
{
int beginYear = calendar1.get(Calendar.YEAR);
int endYear  = calendar2.get(Calendar.YEAR);
ret = endYear - beginYear;
}
break;
case Calendar.MONTH: 
{
int beginYear = calendar1.get(Calendar.YEAR);
int endYear  = calendar2.get(Calendar.YEAR);
int beginMonth = calendar1.get(Calendar.MONTH);
int endMonth   = calendar2.get(Calendar.MONTH);

if (begin.before(end)) {
ret = (endYear - beginYear)*12 -beginMonth + endMonth;
}else{
ret = -((beginYear - endYear)*12 - endMonth + beginMonth);
}
}
break;
case Calendar.DATE: 
{
ret = (int) (intervals / (1000*60*60*24));
}
break;
case Calendar.HOUR: 
{
ret = (int) (intervals / (1000*60*60));
}
break;
case Calendar.MINUTE: 
{
ret = (int) (intervals / (1000*60));
}
break;
case Calendar.SECOND: 
{
ret = (int) (intervals / (1000));
}
break;
default:
break;
}
return ret;
}


/**
* @param date 要获取月中最后一天的日期
* @return int  月中的最后一天,1表示一月中的第一天;
*/
public static int getLastDayOfMonth(Date date){

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);

return calendar.get(Calendar.DAY_OF_MONTH);
}

/**
* @param month 要获取最后一天的本年的月,1表示首月
* @return int  月中的最后一天,1表示一月中的第一天;


*/
public static int getLastDayOfMonth(int month){

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.MONTH, month - 1);
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);

return calendar.get(Calendar.DAY_OF_MONTH);
}


public static void main(String[] args) {

Date date1 = new Date();
Date date2 = new Date(System.currentTimeMillis()); 

System.out.println("get last day of Feb:"+getLastDayOfMonth(12));

Date date3 = addMonths(date1, 23);
 
System.err.println("get interval years : date1:"+date1+",date3:"+date3+":"
+getIntevalsOfDates(Calendar.YEAR, date1, date3));
System.err.println("get interval years : date1:"+date1+",date3:"+date3+":"
+getIntevalsOfDates(Calendar.MONTH, date1, date3));

Timestamp timestamp = new Timestamp(date1.getTime());



System.out.println(format(date1, COMMON_DATETIME_MILLIS_FORMAT));
System.out.println(format(date1, CHINESE_DATE_FORMAT));

 

}

public static void useCalenderMain(){

Calendar calendar = Calendar.getInstance();

Date date1 = new Date();
Date date2 = new Date(System.currentTimeMillis());
System.out.println(date1.after(date2));
System.out.println(date1.getDate());
System.out.println(date1.getDay());
System.out.println(date1.getHours());
System.out.println(date1.getMinutes());

System.out.println(calendar.getTime());
System.out.println(calendar.getAvailableLocales());

System.out.println(calendar.getTimeZone());
System.out.println(calendar.getTimeInMillis());

System.out.println("calendar.get(Calendar.YEAR):"+calendar.get(Calendar.YEAR));
System.out.println("calendar.get(Calendar.MONTH):"+calendar.get(Calendar.MONTH));
System.out.println("calendar.get(Calendar.DATE):"+calendar.get(Calendar.DATE));
System.out.println("calendar.get(Calendar.DAY_OF_YEAR):"+calendar.get(Calendar.DAY_OF_YEAR));
System.out.println("calendar.get(Calendar.DAY_OF_MONTH):"+calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("calendar.get(Calendar.DAY_OF_WEEK):"+calendar.get(Calendar.DAY_OF_WEEK));//周日为第一天
System.out.println("calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH):"+calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));

System.out.println("calendar.get(Calendar.HOUR):"+calendar.get(Calendar.HOUR));
System.out.println("calendar.get(Calendar.HOUR_OF_DAY):"+calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("calendar.get(Calendar.MINUTE):"+calendar.get(Calendar.MINUTE));
System.out.println("calendar.get(Calendar.SECOND):"+calendar.get(Calendar.SECOND));
System.out.println("calendar.get(Calendar.MILLISECOND):"+calendar.get(Calendar.MILLISECOND));

calendar.add(Calendar.DAY_OF_MONTH, -30);
date2 = calendar.getTime();
System.out.println("calendar.add(Calendar.DAY_OF_MONTH, -30):"+date2);

calendar.add(Calendar.DAY_OF_MONTH, 30);
date2 = calendar.getTime();
System.out.println("calendar.add(Calendar.DAY_OF_MONTH, 30):"+date2);

calendar.roll(Calendar.DAY_OF_MONTH, 30);
date2 = calendar.getTime();
System.out.println("calendar.roll(Calendar.DAY_OF_MONTH, -30):"+date2);


}

}

本文转载:CSDN博客