`
zhongxuchen
  • 浏览: 33318 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

睿智平台中超完整的日期处理工具类DateUtil

SQL 
阅读更多

很多地方都会用到Date日期处理,睿智平台当然也包括自己的dateUtil、stringutil、fileutil、IOUtil、NetUtil、XMLUtil等等大量的辅助开发工具类,这里先介绍一个大家常用的DateUtil

/**
package org.sagacity.framework.utils;

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

import org.sagacity.framework.log.Log;
import org.sagacity.framework.log.LogFactory;

/**
 *
 
*@project sagacity-core
 
*@description:$<p>日期处理支持类,提供日常工作中的所有日期的操作处理</p>$
 
*@author chenrenfei $<a href="mailto:zhongxuchen@hotmail.com">联系作者</a>$
 
*@version $id:DateUtil.java,Revision:v1.0,Date:2008-12-14 下午08:01:19 $
 */
public class DateUtil {
 /**
  * 定义日志
  */
 protected final static Log logger = LogFactory.getFactory().getLog(
   DateUtil.class);

 private static final String[] CHINA_DATE_KEYS = { "○", "О", "0", "Ο", "O",
   "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "年", "月",
   "日", "时", "分", "秒" };
 private static final String[] CHINA_DATE_KEY_MAP = { "0", "0", "0", "0",
   "0", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "-",
   "-", "", ":", ":", "" };
 private static String dateFormat = "yyyy-MM-dd";
 private static DateFormat df = new SimpleDateFormat(dateFormat);

 /**
  * 英文月份名称
  */
 private static final String[] MONTH_ENGLISH_NAME = { "January", "February",
   "March", "April", "May", "June", "July", "August", "September",
   "October", "November", "December" };

 /**
  * 中文星期的名称
  */
 private static final String[] WEEK_CHINA_NAME = { "星期一", "星期二", "星期三",
   "星期四", "星期五", "星期六", "星期日" };

 /**
  * 英文星期的名称
  */
 private static final String[] WEEK_ENGLISH_NAME = { "Monday", "Tuesday",
   "Wensday", "Tursday", "Friday", "Saturday", "Sunday" };

 /**
  * 定义日期的格式
  */
 public final static class FORMAT {
  /**
   * 8位日期格式
   */
  public final static String DATE_8CHAR = "yyyyMMdd";

  /**
   * 点号日期格式
   */
  public final static String DATE_DOT = "yyyy.MM.dd";

  /**
   * 反斜杠日期格式
   */
  public final static String DATE_SLASH = "yyyy/MM/dd";

  /**
   * 横杠日期格式
   */
  public final static String DATEF_HORIZONTAL = "yyyy-MM-dd";

  /**
   * 日期时间(日期点格�?)
   */
  public final static String DATATIME_DOT = "yyyy.MM.dd HH:mm:ss";

  /**
   * 日期时间(日期反斜杠)
   */
  public final static String DATETIME_SLASH = "yyyy/MM/dd HH:mm:ss";

  /**
   * 日期时间(日期横杠)
   */
  public final static String DATETIME_HORIZONTAL = "yyyy-MM-dd HH:mm:ss";
 }

 /**
  * 将日期字符串或时间转换成时间类型 日期字符串中的日期分隔符可是:"/",".","-", 返回时间具体到秒 只提供常用的日期格式处理
  *
  * @param str
  * @return Date
  * @throws UtilException
  */
 public static Date parseString(String dateString, String format) {
  if (dateString == null || "".equals(dateString)
    || "null".equals(dateString.toLowerCase())) {
   logger.error("The date string is null!");
   return null;
  }
  try {
   if (StringUtil.isNullOrBlank(format))
    return parseString(dateString);
   DateFormat df = new SimpleDateFormat(format);
   return df.parse(dateString);
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }

 /**
  *将日期字符串或时间转换成时间类型 日期字符串中的日期分隔符可是:"/",".","-", 返回时间具体到秒 只提供常用的日期格式处理
  *
  * @TODO TODO
 
*@param dateStr
 
*@return
  */
 public static Date parseString(String dateStr) {
  if (dateStr == null)
   return null;
  dateStr = dateStr.trim();
  if (dateStr.equals(""))
   return null;
  DateFormat df;
  try {
   if (StringUtil.matchs(dateStr, "^\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}$"))
    df = new SimpleDateFormat("HH:mm:ss");
   else if (StringUtil.matchs(dateStr,
     "^\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}\\.\\d{1,3}$"))
    df = new SimpleDateFormat("HH:mm:ss.SSS");
   else if (StringUtil.matchs(dateStr,
     "^\\d{1,2}\\.\\d{1,2}\\.\\d{1,2}$"))
    df = new SimpleDateFormat("HH.mm.ss");
   else if (StringUtil.matchs(dateStr, "^\\d{1,2}\\.\\d{1,2}$"))
    df = new SimpleDateFormat("HH.mm");
   else if (StringUtil.matchs(dateStr, "^\\d{1,2}\\:\\d{1,2}$"))
    df = new SimpleDateFormat("HH:mm");
   else {
    dateStr = dateStr.replace("-", "/").replace(".", "/").replace(
      ":", "/").replace("\\", "/");
    // 按概率高低排序
    if (StringUtil
      .matchs(dateStr, "^\\d{4}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yyyy/MM/dd");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{4}\\/\\d{1,2}\\/\\d{1,2}\\s+\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss");
    else if (StringUtil.matchs(dateStr, "^\\d{8}$"))
     df = new SimpleDateFormat("yyyyMMdd");
    else if (StringUtil.matchs(dateStr, "^\\d{8}\\s+\\d{6}$"))
     df = new SimpleDateFormat("yyyyMMdd HHmmss");
    else if (StringUtil.matchs(dateStr, "^\\d{4}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yyyy/MM");
    else if (StringUtil.matchs(dateStr, "^\\d{6}$"))
     df = new SimpleDateFormat("yyyyMM");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{4}\\/\\d{1,2}\\/\\d{1,2}\\s+\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,3}$"))
     df = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss/SSS");
    else if (StringUtil.matchs(dateStr,
      "^\\d{2}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yy/MM/dd");
    else if (StringUtil.matchs(dateStr, "^\\d{2}\\/\\d{2}$"))
     df = new SimpleDateFormat("yy/MM");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{2}\\/\\d{1,2}\\/\\d{1,2}\\s+\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yy/MM/dd HH/mm/ss");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{2}\\/\\d{1,2}\\/\\d{1,2}\\s+\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yy/MM/dd HH/mm");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{4}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yyyy/MM/dd/HH/mm/ss");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{4}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,3}$"))
     df = new SimpleDateFormat("yyyy/MM/dd/HH/mm/ss/SSS");
    else if (StringUtil
      .matchs(dateStr,
        "^\\d{2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yy/MM/dd/HH/mm/ss");
    else if (StringUtil.matchs(dateStr,
      "^\\d{2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}$"))
     df = new SimpleDateFormat("yy/MM/dd/HH/mm");
    else if (StringUtil.matchs(dateStr, "^\\d{6}\\s+\\d{6}$"))
     df = new SimpleDateFormat("yyMMdd HHmmss");
    else if (StringUtil.matchs(dateStr, "^\\d{7,9}$"))
     df = new SimpleDateFormat("HHmmssSSS");
    else if (StringUtil.matchs(dateStr, "^\\d{14}$"))
     df = new SimpleDateFormat("yyyyMMddHHmmss");
    else if (StringUtil.matchs(dateStr, "^\\d{15,17}$"))
     df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    else if (StringUtil.matchs(dateStr, "^\\d{12}$"))
     df = new SimpleDateFormat("yyMMddHHmmss");
    else if (StringUtil.matchs(dateStr, "^\\d{4}$"))
     df = new SimpleDateFormat("yyyy");
    else
     df = new SimpleDateFormat("yyyy/MM/dd");
   }
   return df.parse(dateStr);
  } catch (java.text.ParseException e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  * 日期对象类型转换
  *
  * @param dt
  * @return
  */
 public static java.util.Date convertDateObject(Object dt) {
  if (dt == null) {
   System.err.println("日期不能为空,请正确输入!");
   return null;
  }
  if (!(dt instanceof String) && !(dt instanceof java.sql.Date)
    && !(dt instanceof java.util.Date)
    && !(dt instanceof java.lang.Integer)
    && !(dt instanceof java.lang.Long))
   throw new IllegalArgumentException(
     "日期格式必须是String、Date、Long、Integer类型,请正确输入!");
  Date result = null;

  if (dt instanceof String)
   result = parseString((String) dt);
  else if (dt instanceof java.util.Date)
   result = new java.util.Date(((java.util.Date) dt).getTime());
  else if (dt instanceof java.sql.Date)
   result = new java.util.Date(((java.sql.Date) dt).getTime());
  else
   result = parseString(dt.toString());
  return result;
 }

 /**
  * �?要改进增加非正常格式的日期转换功�?!�?20080718103020 �? 20080718 103020 将日期类型转换成字符�?
  * 其格式包�?:通过DateFormat转换的标准格式,如yyyy/MM/dd HH:mm:ss或�?�yyyy-MM-dd HH:mm:ss
  * 非标准的格式,如YYYY/MM/DD
  *
  * @param dt
  * @param fmt
  * @return String
  * @throws UtilException
  */
 public static String formatDate(Object dt, String fmt) {
  if (dt == null)
   return null;
  DateFormat df = null;
  if (fmt.equalsIgnoreCase("yyyy"))
   return Integer.toString(getYear(dt));
  else if (fmt.equalsIgnoreCase("MM"))
   return Integer.toString(getMonth(dt));
  else if (fmt.equalsIgnoreCase("dd"))
   return Integer.toString(getDay(dt));
  df = new SimpleDateFormat(fmt);
  Date tmp = convertDateObject(dt);
  if (tmp == null)
   return null;
  return df.format(tmp);
 }

 /**
  * 获取当前操作系统的日期
  *
  * @return Date
  */
 public static java.sql.Date getSqlDate() {
  return getSqlDate(new java.util.Date());
 }

 /**
  * 获取当前以sql.date的日期
  *
  * @param date
  * @return
  */
 public static java.sql.Date getSqlDate(Object date) {
  if (date == null)
   return null;
  return new java.sql.Date(convertDateObject(date).getTime());
 }
 
 public static java.sql.Timestamp getTimestamp(Object date) {
  Date tmp = convertDateObject(date);
  return new Timestamp(tmp.getTime());
 }

 /**
  * 获取当前操作系统的时间
  *
  * @return 当前操作系统的时间
  */
 public static Date getNowTime() {
  return Calendar.getInstance().getTime();
 }

 // Add millisecond
 public static Date addMilliSecond(Object dt, long millisecond) {
  Date tmp = convertDateObject(dt);
  tmp.setTime(tmp.getTime() + millisecond);
  return tmp;
 }

 public static Date addSecond(Object dt, long second) {
  return addMilliSecond(dt, 1000L * second);
 }

 public static Date addSecond(Object dt, double second) {
  Double millisecond = new Double(1000.0 * second);
  return addMilliSecond(dt, millisecond.longValue());
 }

 public static Date addMinute(Object dt, long minute) {
  return addMilliSecond(dt, 1000L * 60L * minute);
 }

 public static Date addMinute(Object dt, double minute) {
  Double millisecond = new Double(1000.0 * 60.0 * minute);
  return addMilliSecond(dt, millisecond.longValue());
 }

 public static Date addHour(Object dt, long hour) {
  return addMilliSecond(dt, 1000L * 60L * 60L * hour);
 }

 public static Date addHour(Object dt, double hour) {
  Double millisecond = new Double(1000.0 * 60.0 * 60.0 * hour);
  return addMilliSecond(dt, millisecond.longValue());
 }

 public static Date addDay(Object dt, long day) {
  return addMilliSecond(dt, 1000L * 60L * 60L * 24L * day);
 }

 public static Date addDay(Object dt, double day) {
  Double millisecond = new Double(1000.0 * 60.0 * 60.0 * 24.0 * day);
  return addMilliSecond(dt, millisecond.longValue());
 }

 // add month
 public static Date addMonth(Object dt, int month) {
  Date tmp = convertDateObject(dt);
  GregorianCalendar gc = new GregorianCalendar();
  gc.setTime(tmp);
  gc.add(2, month);
  return gc.getTime();
 }

 /**
  * add year
  *
  * @param dt
  * @param year
  * @return
  */
 public static Date addYear(Object dt, int year) {
  GregorianCalendar gc = new GregorianCalendar();
  gc.setTime(convertDateObject(dt));
  gc.add(1, year);
  return gc.getTime();
 }

 /**
  * @todo 在给定的日期上做年的加减运算
  * @param dt
  * @param year
  * @return
  */
 public static Date addYear(Object dt, double year) {
  // 如果日期为空表示以当前日期为基数进行加减
  Date tmp = convertDateObject(dt);
  double floorYear = Math.floor(year);
  double decimalYear = year - floorYear;
  tmp = addYear(tmp, (new Double(floorYear)).intValue());
  Calendar cal = Calendar.getInstance();
  cal.setTime(tmp);
  cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 1);
  Date nextdt = cal.getTime();
  long yearMillisecond = nextdt.getTime() - tmp.getTime();
  double millisecond = (double) yearMillisecond * decimalYear;
  return addSecond(tmp, (long) millisecond);
 }

 public static int getYear() {
  return getYear(null);
 }

 public static int getYear(Object dateValue) {
  GregorianCalendar currentDate = new GregorianCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.YEAR);
 }

 public static String getShortYear(Object dateValue) {
  int year = getYear(dateValue);
  return Integer.toString(year).substring(2);
 }

 public static int getMonth() {
  return getMonth(null);
 }

 /**
  *
 
*@TODO 获取月份的英文名称
 
*@param dateValue
 
*@return
  */
 public static String getMonthName(Object dateValue) {
  return MONTH_ENGLISH_NAME[getMonth(dateValue) - 1];
 }

 public static int getMonth(Object dateValue) {
  GregorianCalendar currentDate = new GregorianCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.MONTH) + 1;
 }

 public static int getDay() {
  return getDay(null);
 }

 public static int getDay(Object dateValue) {
  GregorianCalendar currentDate = new GregorianCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.DAY_OF_MONTH);
 }

 public static int getHour() {
  return getHour(null);
 }

 public static int getHour(Object dateValue) {
  GregorianCalendar currentDate = new GregorianCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.HOUR_OF_DAY);
 }

 public static int getMinute() {
  return getMinute(null);
 }

 public static int getMinute(Object dateValue) {
  GregorianCalendar currentDate = new GregorianCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.MINUTE);
 }

 public static int getSecond() {
  return getSecond(null);
 }

 public static int getSecond(Object dateValue) {
  GregorianCalendar currentDate = new GregorianCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.SECOND);
 }

 /**
  * 获取当前日历
  *
  * @return
  */
 public static GregorianCalendar getCalendar() {
  return new GregorianCalendar();
 }

 public static int getDayOfWeek() {
  return getDayOfWeek(null);
 }

 public static int getDayOfWeek(Object dateValue) {
  GregorianCalendar currentDate = getCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  int week = currentDate.get(Calendar.DAY_OF_WEEK) - 1;
  if (week == 0)
   return 7;
  return week;
 }

 /**
  *
 
*@TODO 获取日期的中文名称
 
*@param dateValue
 
*@return
  */
 public static String getDayOfWeekChinaName(Object dateValue) {
  return WEEK_CHINA_NAME[getDayOfWeek(dateValue) - 1];
 }

 /**
  *
 
*@TODO 获取日期的中文名称
 
*@param dateValue
 
*@return
  */
 public static String getDayOfWeekEnglishName(Object dateValue) {
  return WEEK_ENGLISH_NAME[getDayOfWeek(dateValue) - 1];
 }

 public static int getWeekOfMonth() {
  return getWeekOfMonth(null);
 }

 /**
  * 获取给定日期所在月的第几周
  *
  * @param dateValue
  * @return
  */
 public static int getWeekOfMonth(Object dateValue) {
  GregorianCalendar currentDate = getCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.WEEK_OF_MONTH) - 1;
 }

 public static int getWeekOfYear() {
  return getWeekOfYear(null);
 }

 /**
  * 获取给定日期所在年的第几周
  *
  * @param dateValue
  * @return
  */
 public static int getWeekOfYear(Object dateValue) {
  GregorianCalendar currentDate = getCalendar();
  if (dateValue != null)
   currentDate.setTime(convertDateObject(dateValue));
  return currentDate.get(Calendar.WEEK_OF_YEAR) - 1;
 }

 /**
  * @todo 获取相隔两个时间的周数
  * @param floorDate
  * @param goalDate
  * @return
  */
 public static double getIntervalWeeks(Object floorDate, Object goalDate) {
  return getIntervalHours(floorDate, goalDate) / (7 * 24);
 }

 /**
  * @todo 获取两个时间间隔的天数
  * @param floorDate
  * @param goalDate
  * @return
  */
 public static long getIntervalDays(Object floorDate, Object goalDate) {
  return getIntervalMillSeconds(floorDate, goalDate) / (3600 * 1000 * 24);
 }

 /**
  * @todo 获取两个时间间隔的小时数
  * @param floorDate
  * @param goalDate
  * @return
  */
 public static double getIntervalHours(Object floorDate, Object goalDate) {
  return getIntervalMillSeconds(floorDate, goalDate) / (3600 * 1000);
 }

 /**
  * @todo 获取两时间的间隔分钟
  * @param floorDate
  *            Date
  * @param goalDate
  *            Date
  * @return double
  */
 public static double getIntervalMinutes(Object floorDate, Object goalDate) {
  return getIntervalMillSeconds(floorDate, goalDate) / (60 * 1000);
 }

 /**
  * @todo 获取两时间的间隔分钟
  * @param floorDate
  *            Date
  * @param goalDate
  *            Date
  * @return double
  */
 public static double getIntervalSeconds(Object floorDate, Object goalDate) {
  return getIntervalMillSeconds(floorDate, goalDate) / (1000);
 }

 /**
  * @todo 获取两时间间隔的毫秒数
  * @param floorDate
  *            Date
  * @param goalDate
  *            Date
  * @return double
  */
 public static long getIntervalMillSeconds(Object floorDate, Object goalDate) {
  return convertDateObject(goalDate).getTime()
    - convertDateObject(floorDate).getTime();
 }

 /**
  * @todo 获取两个时间之间的间隔并以格�?:xx天xx小时xx分钟xx秒输出
  * @param floorDate
  *            Date
  * @param goalDate
  *            Date
  * @return String
  */
 public static String getIntervalDate(Object floorDate, Object goalDate) {
  long intervalSeconds = getIntervalMillSeconds(floorDate, goalDate) / 1000;
  StringBuffer intervalDate = new StringBuffer();
  if (intervalSeconds < 0)
   intervalSeconds = -intervalSeconds;

  long days = intervalSeconds / (24 * 60 * 60);
  intervalSeconds = intervalSeconds - days * 24 * 60 * 60;
  long hours = intervalSeconds / (60 * 60);
  intervalSeconds = intervalSeconds - hours * 3600;
  long minuts = intervalSeconds / 60;
  intervalSeconds = intervalSeconds - minuts * 60;
  if (days > 0)
   intervalDate.append(days + "天");
  if (hours > 0)
   intervalDate.append(hours + "小时");
  if (minuts > 0)
   intervalDate.append(minuts + "分钟");
  if (intervalSeconds > 0)
   intervalDate.append(intervalSeconds + "秒");

  return intervalDate.toString();
 }

 /**
  * @todo 获取两时间间隔的年数
  * @param floorDate
  *            Date
  * @param goalDate
  *            Date
  * @return double
  */
 public static long getIntervalYears(Object floorDate, Object goalDate) {
  return convertDateObject(goalDate).getYear()
    - convertDateObject(floorDate).getYear();
 }

 /**
  * @todo 获取两时间间隔的月数
  * @param floorDate
  *            Date
  * @param goalDate
  *            Date
  * @return double
  */
 public static long getIntervalMonths(Object floorDate, Object goalDate) {
  Date date1 = convertDateObject(goalDate);
  Date date2 = convertDateObject(floorDate);
  return date1.getYear() * 12 + date1.getMonth() - date2.getYear() * 12
    - date2.getMonth();
 }

 /**
  * 获取给定日期的月份的天数
  *
  * @param date
  * @return
  */
 public static int getMonthDays(Object date) {
  Date target = convertDateObject(date);
  int year = target.getYear();
  int month = target.getMonth();
  GregorianCalendar beginCalendar = new GregorianCalendar();
  beginCalendar.set(year, month, 1);
  GregorianCalendar endCalendar = new GregorianCalendar();
  endCalendar.set(year, month + 1, 1);
  return new Double(getIntervalHours(beginCalendar.getTime(), endCalendar
    .getTime()) / 24).intValue();
 }

 /**
  * 将日期转化为中文格式
  *
  * @param dateValue
  * @return
  */
 public static String format2China(Object dateValue) {
  Date date = convertDateObject(dateValue);
  if (date == null)
   return null;
  GregorianCalendar currentDate = new GregorianCalendar();
  currentDate.setTime(convertDateObject(dateValue));
  String tmpDate;
  StringBuffer result = new StringBuffer();
  if (dateValue instanceof String) {
   tmpDate = (String) dateValue;
   if (tmpDate.length() >= 4)
    result.append(currentDate.get(Calendar.YEAR) + "年");
   if (tmpDate.length() >= 6)
    result.append((currentDate.get(Calendar.MONTH) + 1) + "月");
   if (tmpDate.length() >= 8)
    result.append(currentDate.get(Calendar.DAY_OF_MONTH) + "日");
   if (tmpDate.length() > 10) {
    result.append(currentDate.get(Calendar.HOUR_OF_DAY) + "时");
    result.append(currentDate.get(Calendar.MINUTE) + "分");
    result.append(currentDate.get(Calendar.SECOND) + "秒");
   }
  } else {
   result.append(currentDate.get(Calendar.YEAR) + "年");
   result.append((currentDate.get(Calendar.MONTH) + 1) + "月");
   result.append(currentDate.get(Calendar.DAY_OF_MONTH) + "日");
   result.append(currentDate.get(Calendar.HOUR_OF_DAY) + "时");
   result.append(currentDate.get(Calendar.MINUTE) + "分");
   result.append(currentDate.get(Calendar.SECOND) + "秒");
  }
  return result.toString();

 }

 /**
  *
 
*@TODO 转换中文日期为指定格式的英文日期形式
 
*@param chinaDate
 
*@param fmt
 
*@return
  */
 public static String parseChinaDate(String chinaDate, String fmt) {
  if (StringUtil.isNullOrBlank(chinaDate))
   return null;
  String tmp = chinaDate;
  for (int i = 0; i < CHINA_DATE_KEYS.length; i++) {
   tmp = tmp.replaceAll(CHINA_DATE_KEYS[i], CHINA_DATE_KEY_MAP[i]);
  }
  String[] chinaDateAry = tmp.split("-");
  StringBuffer result = new StringBuffer();
  for (int i = 0; i < chinaDateAry.length; i++) {
   if (i == 0) {
    result.append(chinaDateAry[0]);
   } else {
    if (chinaDateAry[i].length() == 4)
     result.append(chinaDateAry[i].replaceFirst("10", ""));
    else if (chinaDateAry[i].length() == 3)
     result.append(chinaDateAry[i].replaceFirst("0", ""));
    else if (chinaDateAry[i].length() == 2)
     result.append(chinaDateAry[i]);
    else
     result.append("0" + chinaDateAry[i]);
   }
  }
  if (StringUtil.isNullOrBlank(fmt))
   return result.toString();
  else
   return formatDate(result.toString(), fmt);
 }

 /**
  *
 
*@TODO 转换中文日期为英文格式
 
*@param chinaDate
 
*@return
  */
 public static String parseChinaDate(String chinaDate) {
  return parseChinaDate(chinaDate, null);
 }

 /**
  *
 
*@TODO 获取月份的第一天
 
*@param objectDate
 
*@return
  */
 public static Date firstDayOfMonth(Object objectDate) {
  Date date = convertDateObject(objectDate);
  if (date == null)
   return null;
  else {
   String tmp = formatDate(date, "yyyy-MM-dd");
   return parseString(tmp, "yyyy-MM");
  }
 }

 /**
  *
 
*@TODO 获取月份的最后一天
 
*@param objectDate
 
*@return
  */
 public static Date lastDayOfMonth(Object objectDate) {
  Date date = convertDateObject(objectDate);
  if (date == null)
   return null;
  else {
   String tmp = formatDate(date, "yyyy-MM-dd");
   Date result = parseString(tmp, "yyyy-MM");
   result = addMonth(result, 1);
   result = addDay(result, -1);
   return result;
  }
 }

 /**
  *
 
*@TODO 获取指定日期属于当年中第几个季度
 
*@param objDate
 
*@return
  */
 public static int getQuarter(Object objDate) {
  Date date = convertDateObject(objDate);
  if (date == null)
   date = DateUtil.getNowTime();
  int month = getMonth(date);
  return (month + 2) / 3;
 }

 public static void main(String[] args) throws Exception {

  Date temp = DateUtil.parseString("2010-12-27");
  System.err.println(temp);

  System.err.println(DateUtil.formatDate(temp, "yyyy-MM-dd"));
 }
}

0
2
分享到:
评论
1 楼 mzxrh320 2013-09-22  
能否把你的util目录打包发给我学习下呢?

相关推荐

    睿智etl交流.pdf

    睿智ETL由管理服务器、知识库、服务器和管理工具四大部分构成,形成了一个完整的数据集成生态系统。其中,管理服务器负责ETL知识库的管理、ETL服务器的调度,以及响应管理工具的请求;知识库则存储ETL元数据和各种...

    睿智etl使用说明,包括功能组成,界面布局,运行监控

    睿智ETL(UDIS-ETL)是北京睿智欣泰科技有限公司开发的一款高效的数据集成工具,专门设计用于企业级数据仓库构建和维护。它提供了丰富的数据处理服务,包括但不限于SQL服务、文件-表转换服务、表复制、表-表转换服务、...

    睿智Altera助学板资料用户手册

    睿智Altera助学板是一款专为学习和研究Altera FPGA(现场可编程门阵列)设计的硬件平台,配合全面的用户手册,为初学者和专业人士提供了深入理解FPGA技术的资源。本手册包含了从软件安装到硬件原理的全方位指南,...

    中国地图下载工具-睿智版

    综合以上信息,"中国地图下载工具-睿智版"是一款基于.NET平台,利用Infragistics组件构建的专业地图应用,具备地图数据的下载、处理和展示能力,并且支持与SQLite数据库的交互。用户可以通过这个工具高效地管理和...

    关于高校依托思睿智训平台建设大学生跨境电商创新创业基地的思考.pdf

    在探讨高校如何依托思睿智训平台建设大学生跨境电商创新创业基地的过程中,我们可以从以下几个方面提炼和展开相关的知识点: 1. 高等学校创新创业教育改革的重要性:当前国家层面迫切需要通过创新驱动发展战略,...

    睿智fpga开发板原理图.pdf

    以下是基于睿智FPGA开发板原理图的知识点: 1. FPGA开发板供电系统:该开发板提供了两种供电方式,一是外部5V电源适配器,二是USB供电,通过自锁开关K来控制两种供电的切换。 2. 板载电源IC:该开发板采用了三种...

    睿智汇海SQL Server免费培训课程

    睿智汇海的SQL Server免费培训课程是一门深入讲解数据库管理与优化的全面教程,旨在帮助学员掌握SQL Server的核心概念和技术。课程由经验丰富的讲师顾劲鹏指导,内容覆盖了数据库设计、备份策略、性能监控等多个关键...

    睿智送货单打印软件普及版2020

    睿智送货单打印系统普及版是一款非常出色的送货单打印工具。睿智送货单打印系统普及版功能强悍,能够帮助快速打印送货单,提供用户更加方便的送货服务,表格清晰明了,可以有效提高送货效率。 软件特点 1、安装...

    睿智FPGA USB模块资料

    睿智最新FPGA USB模块资料

    睿智CPLD原理图

    睿智CPLD原理图对于初学者来说是一个宝贵的学习资源,它详细展示了CPLD内部逻辑单元、引脚和特殊功能块的布局和连接方式。通过对原理图的学习和分析,初学者可以更好地理解CPLD的工作原理,掌握CPLD设计的基础知识,...

    睿智建设行业管理信息化平台.pptx

    睿智建设行业管理信息化平台.pptx

    睿智送货单打印软件标准版8.80破解版

    使用睿智送货单管理软件在管理好送货单的同时,您还可以管理好您的客户欠款情况。真真正正的让您从此告别手工抄写送货单和使用EXCEL做月结的烦恼,打印出整齐漂亮的送货单。 简单高效管理,从睿智开始... 【特色...

    睿智汇海.Net培训教程WCF入门2 的一个例子

    【标题】:“睿智汇海.Net培训教程WCF入门2 的一个例子” 【知识点详解】: Windows Communication Foundation(WCF)是.NET Framework中用于构建分布式应用程序的服务模型。它提供了一种统一的方式,来创建、配置...

    睿智送货单打印软件标准版2020

    使用睿智送货单管理软件在管理好送货单的同时,您还可以管理好您的客户欠款情况。真真正正的让您从此告别手工抄写送货单和使用EXCEL做月结的烦恼,打印出整齐漂亮的送货单。 简单高效管理,从睿智开始... 【特色...

    睿智FPGA开发板用户手册1.7版本最新

    睿智FPGA开发板用户手册1.7版本最新

    睿智送货单打印软件创业版6.80破解版

    睿智送货单管理软件创业版是一套专为小型企业或个体户及个人用于送货单管理的软件。软件界面简洁、功能强大、操作简便,不仅集成了送货单管理、产品管理、客户管理、数据分析、对账单等常见的送货单管理功能,还具有...

    C#数据结构与算法(睿智汇海 李元波)7

    本教程“C#数据结构与算法(睿智汇海 李元波)7”由睿智汇海的专家李元波主讲,旨在帮助学习者深入理解并熟练运用C#中的数据结构和算法。以下将详细介绍该教程可能涵盖的主要知识点。 1. **数据结构基础**:首先,...

    海纳睿智数据挖掘服务客户端在线下载 1.2.9.63

    海纳睿智数据挖掘服务客户端是一款专业针对数据采集、处理和分析的工具,旨在帮助用户从海量信息中获取有价值的知识。版本1.2.9.63是该软件的最新迭代,提供更高效、稳定的数据挖掘体验。 一、海纳睿智简介 海纳...

    睿智送货单打印软件标准版2019破解版

    使用睿智送货单管理软件在管理好送货单的同时,您还可以管理好您的客户欠款情况。真真正正的让您从此告别手工抄写送货单和使用EXCEL做月结的烦恼,打印出整齐漂亮的送货单。 简单高效管理,从睿智开始... 【特色...

Global site tag (gtag.js) - Google Analytics