日期時間工具類



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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章