/**
* 獲得遞增數天後的時間
* @param date
* @param amount 可以爲任意整數
* @return
*/
public static Date addDays(Date date,int amount){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, amount);
return cal.getTime();
}
package com.***.basedemo.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import com.***.framework.exception.DataBaseException;
/**
*
* 日期操作工具類
* 本類不能從org.apache.commons.lang.time.DateUtils繼承,跟WebLogic下的jar包有衝突
*
* @author cc
* @version 1.0 2013-9-8
* @version 1.0
*/
public class DhccDateUtils {
public static final String DATE_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String DATE_FORMAT_LONG = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_FORMAT_SHORT = "yyyy-MM-dd";
/**
* 將日期格式化爲"yyyy-MM-dd"格式的日期
*/
public static Date date2SimpleDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//清除時、分、秒、毫秒
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 將日期格式化爲指定格式的日期
*/
public static Date date2FormatDate(Date date,String formatStr) {
String tmp = dateToStr(date, formatStr);
return strToDate(tmp, formatStr);
}
/**
* 返回格式化的日期字符串
*
* @param date
* 日期
* @param format
* 格式
* @return 格式化的日期字符串
*/
public static String dateToStr(Date date, String format)
{
if (date == null) {
return null;
}
DateFormat df = new SimpleDateFormat(format);
return df.format(date);
}
/**
* 返回格式化的日期字符串
*
* @param date
* 日期
* @return 格式化的日期字符串
*/
public static String dateToStr(Date date)
{
return dateToStr(date, DATE_FORMAT_LONG);
}
/**
返回格式化的日期字符串(帶T)
* @param date
* @return
*/
public static String dateToTStr(Date date) {
String dateStr = dateToStr(date,"yyyy-MM-dd&HH:mm:ss");
return dateStr.replace('&', 'T');
}
/**
* 將字符串轉換爲日期
*
* @param dateStr
* 日期字符串
* @param format
* 格式
* @return 日期
* @throws ParseException
*/
public static Date strToDate(String dateStr, String format)
{
if (dateStr == null) {
return null;
}
DateFormat df = new SimpleDateFormat(format);
try {
return df.parse(dateStr);
}
catch (ParseException e) {
throw new DataBaseException(dateStr+" "+format,e);
}
}
/**
* 將字符串轉換爲日期
*
* @param dateStr
* 日期字符串
* @return 日期
* @throws ParseException
*/
public static Date strToDate(String dateStr)
{
return strToDate(dateStr, DATE_FORMAT_LONG);
}
/**
* 判斷字符串是否爲日期類型("yyyy-MM-dd")
* @param dateStr 字符串
* @return true是日期類型,否則返回false
*/
public static boolean isDate(String dateStr) {
return dateStr.matches("^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$");
}
/**
* 判斷字符串是否爲日期帶時間類型("yyyy-MM-dd HH:mm:ss")
* @param dateStr 字符串
* @return true是日期帶時間類型,否則返回false
*/
public static boolean isDateTime(String dateStr) {
return dateStr.matches("^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)) (([01]{1}\\d{1}|2[0-3]{1}):[0-5]{1}\\d{1}:[0-5]{1}\\d{1})$");
}
/**
* 判斷字符串是否爲時間類型("HH:mm:ss")
* @param dateStr 字符串
* @return true是時間類型,否則返回false
*/
public static boolean isTime(String dateStr) {
return dateStr.matches("^([01]{1}\\d{1}|2[0-3]{1}):[0-5]{1}\\d{1}:[0-5]{1}\\d{1}$");
}
/**
* 日期增加或減去某個天數
*
* @param dt 需要操作的時間
* @param num 增加或減去的天數
* @return 返回操作後的時間
*/
public static Date getBeforeOrAfterDate(Date dt,int num){
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
cal.add(Calendar.DATE, num);
return cal.getTime();
}
/**
* 日期增加或減去某個時間單位數
*
* @param dt 需要操作的時間
* @param num 增加或減去的天數
* @param typ 時間單位類型(年,月,日,星期,分鐘等)
* @return 返回操作後的時間
*/
public static Date getBeforeOrAfterDate(Date dt,int num, int field){
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
cal.add(field, num);
return cal.getTime();
}
/**
* 日期增加或減去某個天數
*
* @param dt
* 需要操作的時間字符串
* @param num
* 增加或減去的天數
* @return 返回操作後的時間字符串
*/
public static String getBeforeOrAfterDate(String dt, int num) {
if (isDate(dt)) {
Date nextDate = getBeforeOrAfterDate(strToDate(dt,
DATE_FORMAT_SHORT), num);
return dateToStr(nextDate, DATE_FORMAT_SHORT);
} else if (isDateTime(dt)) {
Date nextDate = getBeforeOrAfterDate(
strToDate(dt, DATE_FORMAT_LONG), num);
return dateToStr(nextDate, DATE_FORMAT_LONG);
}
return null;
}
/**
* 日期增加或減去某個天數
*
* @param dt
* 需要操作的時間字符串
* @param num
* 增加或減去的天數
* @param format
* 返回的日期字符串格式
*
* @return 返回操作後的時間字符串 ,帶格式format
*/
public static String getBeforeOrAfterDate(String dt, int num, String format) {
Date nextDate = null;
if (isDate(dt)) {
nextDate = getBeforeOrAfterDate(strToDate(dt, DATE_FORMAT_SHORT),
num);
} else if (isDateTime(dt)) {
nextDate = getBeforeOrAfterDate(strToDate(dt, DATE_FORMAT_LONG),
num);
}
return dateToStr(nextDate, format);
}
/**
* 返回日期是星期幾
* Calendar.SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
*
* @param dt
* @return
*/
public static int getDayOfWeek(Date dt){
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
return cal.get(Calendar.DAY_OF_WEEK);
}
/**
* 判斷兩個日期區間是否有交集
*
* @param a1 第一個日期區間的首日日期
* @param a2 第一個日期區間的末日日期
* @param b1 第二個日期區間的首日日期
* @param b2 第二個日期區間的末日日期
*
* @return 有交集返回true, 沒交集返回false
*/
public static boolean hasIntersection(Date a1, Date a2, Date b1, Date b2) {
if ((a1.before(b1) && (a2.after(b1) || a2.equals(b1))) ||
((a1.after(b1) || a1.equals(b1))) && ((a1.before(b2)) || (a1.equals(b2))))
return true;
return false;
}
/**
* 返回指定日期的月份
*
* @param date 日期
* @return 月份
*/
public static String getMonthByDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return String.valueOf(calendar.get(Calendar.MONTH) + 1);
}
/**
* 返回月份所在季度
*/
public static String getQuarterByMonth(String mon) {
int month = Integer.parseInt(mon);
return String.valueOf((month-1) / 3 + 1);
}
/**
* 返回兩個日期小時差
*/
public static double getHour(Date d1, Date d2) {
if (d1 == null || d2 == null) {
return 0;
}
long ms = getMilliSecond(d1, d2);
return ms/1000.00/60/60;
}
/**
* 返回兩個日期天數差
*/
public static long getDay(Date d1, Date d2){
if (d1 == null || d2 == null) {
return 0;
}
long ms = getMilliSecond(d1, d2);
return ms/1000/60/60/24;
}
/**
* 返回兩個日期毫秒差
*/
public static long getMilliSecond(Date d1, Date d2) {
long d1MS = d1.getTime();
long d2MS = d2.getTime();
return Math.abs(d1MS - d2MS);
}
/**
* 獲得遞增數秒後的時間
* @param date
* @param amount 可以爲任意整數
* @return
*/
public static Date addSeconds(Date date,int amount){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.SECOND, amount);
return cal.getTime();
}
/**
* 獲得遞增數分鐘後的時間
* @param date
* @param amount 可以爲任意整數
* @return
*/
public static Date addMinutes(Date date,int amount){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, amount);
return cal.getTime();
}
/**
* 獲得遞增數小時後的時間
* @param date
* @param amount 可以爲任意整數
* @return
*/
public static Date addHours(Date date,int amount){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR, amount);
return cal.getTime();
}
/**
* 獲得遞增數天後的時間
* @param date
* @param amount 可以爲任意整數
* @return
*/
public static Date addDays(Date date,int amount){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, amount);
return cal.getTime();
}
/**
* 在日期上加月數
* @param sDate
* @param num
* @return
*/
public static Date addMonths(Date sDate,int num){
Calendar cal = Calendar.getInstance();
cal.setTime(sDate);
cal.add(Calendar.MONTH, num);
return cal.getTime();
}
/**
* 獲得遞增數年後的時間
* @param date
* @param amount 可以爲任意整數
* @return
*/
public static Date addYears(Date date,int amount){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, amount);
return cal.getTime();
}
/**
* 獲取某月的天數
*
* @param year
* 年份
* @param month
* 月份
* @return 天數
*/
public static int getDaysByMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.set(year, month, 0);
return c.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 根據年月日獲取時間
* @param year 年
* @param month 月
* @param day 日
* @return 返回指定時間
*/
public static Date getDate(int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
return calendar.getTime();
}
/**
* 返回兩個日期的分鐘數差
*/
public static long getMinute(Date d1, Date d2) {
if (d1 == null || d2 == null) {
return 0;
}
long ms = getMilliSecond(d1, d2);
return ms/1000/60;
}
//以下方法從org.apache.commons.lang.time.DateUtils拷貝過來(爲兼容以前代碼)
/**
* 截取時間(後面填充0,如filed取值Calendar.DAY_OF_MONTH,
* 則返回的時間格式爲“yyyy-MM-dd”,時、分、秒、毫秒均爲0)
* @param date 時間
* @param field 時間字段
* @return 截取後的時間
*/
public static Date truncate(Date date, int field) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar gval = Calendar.getInstance();
gval.setTime(date);
modify(gval, field, false);
return gval.getTime();
}
}
/**
* 截取時間(後面填充0,如filed取值Calendar.DAY_OF_MONTH,
* 則返回的時間格式爲“yyyy-MM-dd”,時、分、秒、毫秒均爲0)
* @param date 時間
* @param field 時間字段
* @return 截取後的時間
*/
public static Calendar truncate(Calendar date, int field) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar truncated = (Calendar) date.clone();
modify(truncated, field, false);
return truncated;
}
}
/**
* 截取時間(後面填充0,如filed取值Calendar.DAY_OF_MONTH,
* 則返回的時間格式爲“yyyy-MM-dd”,時、分、秒、毫秒均爲0)
* @param date 時間
* @param field 時間字段
* @return 截取後的時間
*/
public static Date truncate(Object date, int field) {
if (date == null)
throw new IllegalArgumentException("The date must not be null");
if (date instanceof Date)
return truncate((Date) date, field);
if (date instanceof Calendar)
return truncate((Calendar) date, field).getTime();
else
throw new ClassCastException("Could not truncate " + date);
}
private static final int fields[][] = { { 14 }, { 13 }, { 12 }, { 11, 10 },
{ 5, 5, 9 }, { 2, 1001 }, { 1 }, { 0 } };
private static void modify(Calendar val, int field, boolean round) {
if (val.get(1) > 280000000)
throw new ArithmeticException(
"Calendar value too large for accurate calculations");
if (field == 14)
return;
Date date = val.getTime();
long time = date.getTime();
boolean done = false;
int millisecs = val.get(14);
if (!round || millisecs < 500)
time -= millisecs;
if (field == 13)
done = true;
int seconds = val.get(13);
if (!done && (!round || seconds < 30))
time -= (long) seconds * 1000L;
if (field == 12)
done = true;
int minutes = val.get(12);
if (!done && (!round || minutes < 30))
time -= (long) minutes * 60000L;
if (date.getTime() != time) {
date.setTime(time);
val.setTime(date);
}
boolean roundUp = false;
for (int i = 0; i < fields.length; i++) {
for (int j = 0; j < fields[i].length; j++)
if (fields[i][j] == field) {
if (round && roundUp)
if (field == 1001) {
if (val.get(5) == 1) {
val.add(5, 15);
} else {
val.add(5, -15);
val.add(2, 1);
}
} else {
val.add(fields[i][0], 1);
}
return;
}
int offset = 0;
boolean offsetSet = false;
switch (field) {
case 1001:
if (fields[i][0] == 5) {
offset = val.get(5) - 1;
if (offset >= 15)
offset -= 15;
roundUp = offset > 7;
offsetSet = true;
}
break;
case 9: // '\t'
if (fields[i][0] == 11) {
offset = val.get(11);
if (offset >= 12)
offset -= 12;
roundUp = offset > 6;
offsetSet = true;
}
break;
}
if (!offsetSet) {
int min = val.getActualMinimum(fields[i][0]);
int max = val.getActualMaximum(fields[i][0]);
offset = val.get(fields[i][0]) - min;
roundUp = offset > (max - min) / 2;
}
if (offset != 0)
val.set(fields[i][0], val.get(fields[i][0]) - offset);
}
throw new IllegalArgumentException("The field " + field
+ " is not supported");
}
//以上方法從org.apache.commons.lang.time.DateUtils拷貝過來
}