日期時間工具類
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import com.sxd.da.base.exception.UncheckedException;
/**
* 日期時間工具類。
*/
public class DateUtils {
public static final String TO_MONTH = "yyyy-MM";
public static final String TO_DATE = "yyyy-MM-dd";
public static final String TO_DATE_CN = "yyyy年MM月dd日";
public static final String TO_MINUTE = "yyyy-MM-dd HH:mm";
public static final String TO_SECOND = "yyyy-MM-dd HH:mm:ss";
public static final String TO_MILLISECOND = "yyyy-MM-dd HH:mm:ss SSSS";
public static final String[] FORMATS = new String[] { TO_DATE, TO_MONTH,
TO_MINUTE, TO_SECOND, TO_MILLISECOND };
public static final String TO_MONTH_N = "yyyyMM";
public static final String TO_DATE_N = "yyyyMMdd";
public static final String TO_MINUTE_N = "yyyyMMddHHmm";
public static final String TO_SECOND_N = "yyyyMMddHHmmss";
public static final String TO_MILLISECOND_N = "yyyyMMddHHmmssSSSS";
/**
* 將字符串解析成Date對象。該方法嘗試用[{@link #TO_MONTH}/{@link #TO_DATE}/
* {@link #TO_MINUTE}/{@link #TO_SECOND}/{@link #TO_MILLISECOND}
* ]格式進行解析,如果無法解析將拋出異常。<br/>
* 該方法遍歷五種日期格式,效率較低。如果你明確知道字符串的日期格式應調用 {@link #parse(String, String)}方法。
*
* @param str
* 字符串
* @return 返回對應的Date對象。
*/
public static Date parse(String str) {
String pattern = getDateFormat(str);
return parse(str, pattern);
}
/**
* 將指定格式的字符串解析成Date對象。
*
* @param str
* 字符串
* @param format
* 格式
* @return 返回對應的Date對象。
*/
public static Date parse(String str, String format) {
SimpleDateFormat parser = new SimpleDateFormat(format);
try {
return parser.parse(str);
} catch (ParseException e) {
throw new UncheckedException("將字符串解析爲Date對象時發生異常", e);
}
}
/**
* 將Date對象解析成yyyy-MM-dd格式的字符串。
*
* @param date
* Date對象
* @return 返回yyyy-MM-dd格式的字符串。
*/
public static String format(Date date) {
return format(date, TO_DATE);
}
/**
* 將Date對象解析成指定格式的字符串。
*
* @param date
* Date對象
* @param pattern
* 格式
* @return 返回指定格式的字符串。
*/
public static String format(Date date, String pattern) {
SimpleDateFormat formater = new SimpleDateFormat(pattern);
return formater.format(date);
}
/**
* 獲取字符串的日期格式。如果字符串不在[{@link #TO_MONTH}/{@link #TO_DATE}/ {@link #TO_MINUTE}
* /{@link #TO_SECOND}/{@link #TO_MILLISECOND} ]格式範圍內將拋出異常。
*
* @param str
* 字符串
* @return 返回字符串的日期格式。
*/
public static String getDateFormat(String str) {
for (String format : FORMATS) {
if (isDate(str, format)) {
return format;
}
}
throw new IllegalArgumentException("不支持的日期格式:" + str);
}
/**
* 判斷字符串是否爲日期格式的字符串。
*
* @param str
* 字符串
* @return 如果是日期格式的字符串返回true,否則返回false。
*/
public static Boolean isDate(String str) {
for (String format : FORMATS) {
if (isDate(str, format)) {
return true;
}
}
return false;
}
/**
* 判斷字符串是否爲指定日期格式的字符串。
*
* @param str
* 字符串
* @param format
* 日期格式
* @return 如果是指定日期格式的字符串返回true,否則返回false。
*/
public static Boolean isDate(String str, String format) {
try {
parse(str, format);
return true;
} catch (UncheckedException e) {
return false;
}
}
/**
* 獲取當前日期(只取到日期,時間部分都爲0)。
*
* @return 返回當前日期。
*/
public static Date getToday() {
return parse(format(new Date()), TO_DATE);
}
/**
* 獲取當前日期(帶時間,到秒)
* @return 返回當前日期。
*/
public static Date getNow() {
return new Date();
}
/**
* 日期加指定天數
*
* @param d
* @param day
* @return
* @throws Exception
*/
public static Date addDate(Date d, long day) throws Exception {
long time = d.getTime();
day = day * 24 * 60 * 60 * 1000;
time += day;
return new Date(time);
}
/**
* 獲取指定日期的下一天日期。
*
* @param date
* 指定日期
* @return 返回指定日期的下一天日期。
*/
public static Date getNextDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, 1);
date = calendar.getTime();
return date;
}
/**
* 獲取用戶轉入時間增加一定天數後的時間
* @param date
* @param days
* @return
* @since 2014-4-1
* @author Sunm
*/
public static Date addDate(Date date,int days) {
if(date!=null) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, days);
Date returnDate=calendar.getTime();
return returnDate;
}
return null;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.