java DateUtil




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


}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值