DateUtility 工具類

package com.css.yj.yjzs.proxyCommon;

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

import org.apache.log4j.Logger;

public class DateUtility {
 private static Logger logger = Logger.getLogger(DateUtility.class);
 /**
  * 定義常見的時間格式
  *
  */
 private static String[] dateFormat = { "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss", "yyyy年MM月dd日HH時mm分ss秒", "yyyy-MM-dd", "yyyy/MM/dd", "yy-MM-dd", "yy/MM/dd", "yyyy年MM月dd日",
   "HH:mm:ss", "yyyyMMddHHmmss", "yyyyMMdd", "yyyy.MM.dd", "yy.MM.dd", "MM月dd日HH時mm分" };

 /**
  * 將日期格式從 java.util.Calendar 轉到 java.sql.Timestamp 格式
  *
  * @param date
  *            java.util.Calendar 格式表示的日期
  *
  * @return java.sql.Timestamp 格式表示的日期
  *
  */
 public static Timestamp convUtilCalendarToSqlTimestamp(Calendar date) {
  if (date == null)
   return null;
  else
   return new Timestamp(date.getTimeInMillis());
 }

 /**
  * 將日期格式從 java.util.Timestamp 轉到 java.util.Calendar 格式
  *
  * @param date
  *            java.sql.Timestamp 格式表示的日期
  *
  * @return java.util.Calendar 格式表示的日期
  *
  */
 public static Calendar convSqlTimestampToUtilCalendar(Timestamp date) {
  if (date == null)
   return null;
  else {
   java.util.GregorianCalendar gc = new java.util.GregorianCalendar();
   gc.setTimeInMillis(date.getTime());
   return gc;
  }
 }

 /**
  * 解析一個字符串,形成一個Calendar對象,適應各種不同的日期表示法
  *
  * @param dateStr
  *            期望解析的字符串,注意,不能傳null進去,否則出錯
  *
  * @return 返回解析後的Calendar對象 <br>
  *         <br>
  *         可輸入的日期字串格式如下:
  *
  * <br>
  * "yyyy-MM-dd HH:mm:ss", <br>
  * "yyyy/MM/dd HH:mm:ss", <br>
  * "yyyy年MM月dd日HH時mm分ss秒", <br>
  * "yyyy-MM-dd", <br>
  * "yyyy/MM/dd", <br>
  * "yy-MM-dd", <br>
  * "yy/MM/dd", <br>
  * "yyyy年MM月dd日", <br>
  * "HH:mm:ss", <br>
  * "yyyyMMddHHmmss", <br>
  * "yyyyMMdd", <br>
  * "yyyy.MM.dd", <br>
  * "yy.MM.dd"
  */
 public static Calendar parseDate(String dateStr) {
  if (dateStr == null || dateStr.trim().length() == 0)
   return null;

  Date result = parseDate(dateStr, 0);
  Calendar cal = Calendar.getInstance();
  cal.setTime(result);

  return cal;
 }

 /**
  * 將一個日期轉成日期時間格式,格式這樣 2002-08-05 21:25:21
  *
  * @param date
  *            期望格式化的日期對象
  * @return 返回格式化後的字符串 <br>
  *         <br>
  *         例: <br>
  *         調用:
  *
  * <br>
  * Calendar date = new GregorianCalendar(); <br>
  * String ret = DateUtils.toDateTimeStr(date); <br>
  * 返回:
  *
  * <br>
  * ret = "2002-12-04 09:13:16";
  */
 public static String toDateTimeStr(Calendar date) {
  if (date == null)
   return null;
  return new SimpleDateFormat(dateFormat[0]).format(date.getTime());
 }

 /**
  * 將一個日期轉成日期時間格式,格式這樣 2002-08-05 21:25:21
  *
  * @param date
  *            期望格式化的日期對象
  * @return 返回格式化後的字符串 <br>
  *         <br>
  *         例: <br>
  *         調用:
  *
  * <br>
  * Calendar date = new GregorianCalendar(); <br>
  * String ret = DateUtils.toDateTimeStr(date); <br>
  * 返回:
  *
  * <br>
  * ret = "2002-12-04 09:13:16";
  */
 public static String toDateTimeStr(int format, Calendar date) {
  if (date == null)
   return null;

  return new SimpleDateFormat(dateFormat[format]).format(date.getTime());
 }

 /**
  * 將一個日期轉成日期格式,格式這樣 2002-08-05
  *
  * @param date
  *            期望格式化的日期對象
  * @return 返回格式化後的字符串 <br>
  *         <br>
  *         例: <br>
  *         調用:
  *
  * <br>
  * Calendar date = new GregorianCalendar(); <br>
  * String ret = DateUtils.toDateStr(calendar); <br>
  * 返回:
  *
  * <br>
  * ret = "2002-12-04";
  */
 public static String toDateStr(Calendar date) {
  if (date == null)
   return null;
  return new SimpleDateFormat(dateFormat[3]).format(date.getTime());
 }

 public static String toDateStrByFormatIndex(Calendar date, int formatIndex) {
  if (date == null)
   return null;
  return new SimpleDateFormat(dateFormat[formatIndex]).format(date.getTime());
 }

 public static int calendarMinus(Calendar d1, Calendar d2) {
  if (d1 == null || d2 == null) {
   return 0;
  }

  d1.set(Calendar.HOUR_OF_DAY, 0);
  d1.set(Calendar.MINUTE, 0);
  d1.set(Calendar.SECOND, 0);

  d2.set(Calendar.HOUR_OF_DAY, 0);
  d2.set(Calendar.MINUTE, 0);
  d2.set(Calendar.SECOND, 0);

  long t1 = d1.getTimeInMillis();
  long t2 = d2.getTimeInMillis();
  logger.debug("DateUtils: d1 = " + DateUtility.toDateTimeStr(d1) + "(" + t1 + ")");
  logger.debug("DateUtils: d2 = " + DateUtility.toDateTimeStr(d2) + "(" + t2 + ")");
  long daylong = 3600 * 24 * 1000;
  t1 = t1 - t1 % (daylong);
  t2 = t2 - t2 % (daylong);

  long t = t1 - t2;
  int value = (int) (t / (daylong));

  logger.debug("DateUtils: d2 -d1 = " + value + " (天)");

  return value;
 }

 /**
  *
  * @param d1
  * @param d2
  * @return
  */
 public static long calendarminus(Calendar d1, Calendar d2) {
  if (d1 == null || d2 == null) {
   return 0;
  }
  return (d1.getTimeInMillis() - d2.getTimeInMillis()) / (3600 * 24000);
 }

 /**
  * 內部方法,根據某個索引中的日期格式解析日期
  *
  * @param dateStr
  *            期望解析的字符串
  * @param index
  *            日期格式的索引
  *
  * @return 返回解析結果
  */
 public static Date parseDate(String dateStr, int index) {
  DateFormat df = null;
  try {
   df = new SimpleDateFormat(dateFormat[index]);

   return df.parse(dateStr);
  } catch (ParseException pe) {
   return parseDate(dateStr, index + 1);
  } catch (ArrayIndexOutOfBoundsException aioe) {
   return null;
  }
 }

 /**
  * 字符轉日期,字符串格式:"yyyy-MM-dd",例如2006-01-01
  *
  * @param dateStr
  * @return
  */
 public static Date StringToDate(String dateStr) {
  if (dateStr == null || dateStr.trim().length() == 0) {
   return null;
  }
  return parseDate(dateStr, 3);
 }

 /**
  * DATE to String,支持多種格式
  *
  * @param date
  * @return
  */
 public static String dateToString(Date date, int index) {
  if (date == null) {
   return null;
  }
  return new SimpleDateFormat(dateFormat[index]).format(date);
 }

 /**
  * DATE to String,轉換結果格式爲:"yyyy-MM-dd",例如2006-01-01
  *
  * @param date
  * @return
  */
 public static String dateToString(Date date) {
  if (date == null) {
   return null;
  }
  return new SimpleDateFormat(dateFormat[3]).format(date);
 }

 /**
  * 將日期格式從 java.util.Date 轉到 java.sql.Timestamp 格式 convUtilDateToSqlTimestamp
  * <br>
  *
  * @param date
  *            java.util.Date 格式表示的日期
  * @return Timestamp java.sql.Timestamp 格式表示的日期
  */
 public static Timestamp convUtilDateToSqlTimestamp(Date date) {
  if (date == null)
   return null;
  else
   return new Timestamp(date.getTime());
 }

 public static Calendar convUtilDateToUtilCalendar(Date date) {
  if (date == null)
   return null;
  else {
   java.util.GregorianCalendar gc = new java.util.GregorianCalendar();
   gc.setTimeInMillis(date.getTime());
   return gc;
  }
 }

 /**
  * 內部方法,根據某個索引中的日期格式解析日期
  *
  * @param dateStr
  *            期望解析的字符串
  * @param index
  *            日期格式的索引
  * @return 返回解析結果
  */
 public static Timestamp parseTimestamp(String dateStr, int index) {
  DateFormat df = null;
  try {
   df = new SimpleDateFormat(dateFormat[index]);

   return new Timestamp(df.parse(dateStr).getTime());
  } catch (ParseException pe) {
   return new Timestamp(parseDate(dateStr, index + 1).getTime());
  } catch (ArrayIndexOutOfBoundsException aioe) {
   return null;
  }
 }

 /**
  * 內部方法,根據默認的日期格式“yyyy-MM-dd”解析日期
  *
  * @param dateStr
  *            期望解析的字符串
  * @return 返回解析結果
  */
 public static Timestamp parseTimestamp(String dateStr) {
  DateFormat df = null;
  try {
   df = new SimpleDateFormat(dateFormat[3]);
   return new Timestamp(df.parse(dateStr).getTime());
  } catch (ParseException pe) {
   return null;
  } catch (ArrayIndexOutOfBoundsException aioe) {
   return null;
  }
 }
}

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