项目中使用时间工具类

项目中使用的时间工具类的主要的采用commons-lang中的时间类FastDateFormat,FastDateFormat具有线程安全等功能,使用比较方便。内部有许多工具类。可以随时调用。

 

public abstract class DateUtils {

 /**
  * 
  */
 public static final String MATRIX_NULL_FLAG = "/";

 public static final long MILSEC_PER_DAY = 24 * 3600000;

 public static final FastDateFormat FAST_DAY_FORMATTER = FastDateFormat
   .getInstance("yyyy-MM-dd");

 public static final FastDateFormat FAST_MINUTE_FORMATTER = FastDateFormat
   .getInstance("yyyy-MM-dd HH:mm");

 public static final FastDateFormat FAST_SECOND_FORMATETR = FastDateFormat
   .getInstance("yyyy-MM-dd HH:mm:ss");
 public static final FastDateFormat FAST_SHORT_FORMATETR = FastDateFormat
   .getInstance("yyyyMMdd");
 public static final FastDateFormat FAST_ONLY_MINUTE_FORMATETR = FastDateFormat
   .getInstance("HH:mm");

 public static String getLastDate(int year, int month) {
  int[] monthDay = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
   monthDay[1] = 29;
  }
  int monthDayNum = monthDay[month - 1];
  String end = year + "-" + month + "-" + monthDayNum;
  return end;
 }

 /* 格式化日期为短形式 */
 public static String getShortDate(Date myDate) {
  return FAST_SHORT_FORMATETR.format(myDate);
 }

 /* 格式化日期为标准形式 */
 public static String formatDateTime(Date myDate, String pattern) {
  FastDateFormat format = FastDateFormat.getInstance(pattern);
  return format.format(myDate);
 }

 /* 判断myDate是否为null */
 public static Date isDate(Date myDate) {
  if (myDate == null)
   return new Date();
  return myDate;
 }

 public static Date currentDate() {
  return currentDate(null);
 }

 /**
  * 
  * @return
  */
 public static Date currentDate(DateFormat format) {
  Date today = new Date();
  if (format != null) {
   String string = format.format(today);
   today = parse(string, format);
  }
  return today;
 }

 /**
  * 查询当天的前n天的具体时间
  * 
  * @param n
  * @return
  */
 public static String getCurrentDateBefore(int n) {
  Calendar day = Calendar.getInstance();
  day.add(Calendar.DATE, -n);
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  String result = sdf.format(day.getTime());
  return result;
 }

 /**
  * 日期差(time1 - time2,返回负数,若time1在time2之前)
  * 
  * @param time1
  * @param time2
  * @return
  */
 public static long getQuot(Date time1, Date time2) {
  long quot = 0;

  try {
   Date date1 = time1;
   Date date2 = time2;
   quot = date1.getTime() - date2.getTime();
   quot = quot / 1000 / 60 / 60 / 24;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return quot;
 }

 /**
  * 日期差(忽略时间部分,time1 - time2,返回负数,若time1在time2之前)
  * 
  * @param time1
  * @param time2
  * @return
  */
 public static long getQuoteIgnoreTime(Date time1, Date time2) {
  return getQuot(truncate(time1, Calendar.DATE), truncate(time2,
    Calendar.DATE));
 }

 // 判断日期为星期几,1为星期日com.vnvtrip.util,依此类推
 public static int dayOfWeek(Object date1) {
  Date date = (Date) date1;
  // 首先定义一个calendar,必须使用getInstance()进行实例化
  Calendar aCalendar = Calendar.getInstance();
  // 里面野可以直接插入date类型
  aCalendar.setTime(date);
  // 计算此日期是一周中的哪一天
  int x = aCalendar.get(Calendar.DAY_OF_WEEK);
  return x;
 }

 public static String dayOfWeek2(Object date1) {
  Date date = (Date) date1;
  // 首先定义一个calendar,必须使用getInstance()进行实例化
  Calendar aCalendar = Calendar.getInstance();
  // 里面野可以直接插入date类型
  aCalendar.setTime(date);
  // 计算此日期是一周中的哪一天
  int x = aCalendar.get(Calendar.DAY_OF_WEEK);
  return dayOfWeekByDayNum(x);
 }

 public static String dayOfWeekByDayNum(int x) {
  String str = "周日";
  if (x == 7) {
   str = "周六";
  } else if (x == 6) {
   str = "周五";
  } else if (x == 5) {
   str = "周四";
  } else if (x == 4) {
   str = "周三";
  } else if (x == 3) {
   str = "周二";
  } else if (x == 2) {
   str = "周一";
  }
  return str;
 }

 // 根据当前一个星期中的第几天得到它的日期
 public static Date getDateOfCurrentWeek(int day) {
  Calendar aCalendar = Calendar.getInstance();
  int x = aCalendar.get(Calendar.DAY_OF_WEEK);
  aCalendar.add(Calendar.DAY_OF_WEEK, day - (x - 1));
  return aCalendar.getTime();
 }

 // 某一天在一个月中的第几周
 public static int getWeekOfMonth(Date date) {
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(date);
  return calendar.get(Calendar.WEEK_OF_MONTH);
 }

 public static Date addSomeDay(Date oldDate, int num) {
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(oldDate);
  calendar.add(Calendar.DATE, num);
  return calendar.getTime();
 }

 // 把日期“2006-09-01”转化成20060901
 public static String Dateformat(String date) {
  int i = date.length();
  StringBuffer newdate = new StringBuffer(date.substring(0, 4));
  if (i == 8) {

   newdate.append(0);
   newdate.append(date.substring(5, 6));
   newdate.append(0);
   newdate.append(date.substring(7, 8));
  } else if (i == 9) {
   if (date.substring(7, 8).equalsIgnoreCase("-")) {

    newdate.append(date.substring(5, 7));
    newdate.append(0);
    newdate.append(date.substring(8, 9));
   } else {
    newdate.append(0);
    newdate.append(date.substring(5, 6));
    newdate.append(date.substring(7, 9));
   }

  } else {

   newdate.append(date.substring(5, 7));
   newdate.append(date.substring(8, 10));
  }

  return newdate.toString();

 }

 /* 新增static方法 */
 /* 格式话日期为yyyy-MM-dd形式 */
 public static String formatDate(Date myDate) {
  return FAST_DAY_FORMATTER.format(myDate);
 }

 /* 格式话日期为yyyy-MM-dd HH:mm形式 */
 public static String formatDateMinutes(Date myDate) {
  return FAST_MINUTE_FORMATTER.format(myDate);
 }

 /* 格式话日期为yyyy-MM-dd HH:mm:ss形式 */
 public static String formatDateTime(Date myDate) {
  return FAST_SECOND_FORMATETR.format(myDate);
 }

 /* 格式话日期为yyyy-MM-dd HH:mm:ss形式 */
 public static String formatDateMinutesTime(Date myDate) {
  return FAST_ONLY_MINUTE_FORMATETR.format(myDate);
 }

 /* 将字符串转换成日期 */
 public static Date getDateByString(String rq) {

  DateFormat df = new SimpleDateFormat();
  Date d = null;
  try {
   d = df.parse(rq);
  } catch (Exception e) {
  }
  return d;
 }

 public static Date getDateByString(String str, String pattern) {
  SimpleDateFormat sdf = null;
  try {
   sdf = new SimpleDateFormat(pattern);
   return sdf.parse(str);
  } catch (Exception e) {
  }
  return null;
 }

 /**
  * 比较时间是否相同
  * 
  * @param start
  * @param end
  * @return
  */
 public static boolean equals(Date start, Date end) {
  if (start != null && end != null && start.getTime() == end.getTime()) {
   return true;
  }
  return false;
 }

 public static final Date convertStringToDate(String aMask, String strDate) {
  SimpleDateFormat df = null;
  Date date = null;
  df = new SimpleDateFormat(aMask);

  try {
   date = df.parse(strDate);
  } catch (Exception pe) {
  }
  return (date);
 }

 // add by csg
 // 当前月份第一天
 public static Date getCurrentMonthFirstDay() {
  Calendar calendar = Calendar.getInstance();
  Date date = calendar.getTime();
  calendar.setTime(date);
  calendar.set(Calendar.DAY_OF_MONTH, 1);
  return calendar.getTime();
 }

 // 得到当前系统日期.add by lnb 12.12

 public static String getCurrentTime() {
  Date myDate = new Date(System.currentTimeMillis());
  return formatDateTime(myDate);
 }

 public static boolean isSameDay(Date c1, Date c2) {
  return formatDate(c1).equals(formatDate(c2));
 }

 public static Calendar string2Cal(String arg) {
  SimpleDateFormat sdf = null;
  String trimString = arg.trim();
  if (trimString.length() > 14)
   sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  else
   sdf = new SimpleDateFormat("yyyy-MM-dd");
  Date d = null;
  try {
   d = sdf.parse(trimString);
  } catch (ParseException e) {
   return null;
  }
  Calendar cal = Calendar.getInstance();
  cal.setTime(d);
  return cal;
 }

 /**
  * 匹配是否在某个时间段中
  * 
  * @param timePeriod
  *            "00:00-06:00"格式
  * @param time
  *            "07:30"
  * @return
  */
 public static boolean isInPeriod(String timePeriod, String time) {
  String startTime = timePeriod.substring(0, 5);

  String endTime = timePeriod.substring(6);

  String timeTime = time;

  // 和时间段的开始或者结束刚好相等的时候
  if (startTime.equalsIgnoreCase(timeTime)
    || endTime.equalsIgnoreCase(timeTime)) {
   return true;
  }

  SimpleDateFormat d = new SimpleDateFormat("HH:mm");

  try {
   Date startDate = d.parse(startTime);

   Date endDate = d.parse(endTime);

   Date timeDate = d.parse(timeTime);

   if (timeDate.after(startDate) && timeDate.before(endDate)) {
    return true;
   }
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  return false;
 }

 public static boolean isBetween(Date date, Date from, Date to) {
  Assert.notNull(date, "date cannot be null.");
  Assert.notNull(from, "from cannot be null.");
  Assert.notNull(to, "to cannot be null.");
  Assert.isTrue(!from.after(to), "from cannot be after to.");
  return !date.before(from) && !date.after(to);
 }

 public static Date ifNull(Date date, Date defaultDate) {
  return date != null ? date : defaultDate;
 }

 public static String format(Date date, DateFormat df) {
  if (date == null) {
   return "";
  } else if (df != null) {
   return df.format(date).toLowerCase();
  } else {
   return FAST_DAY_FORMATTER.format(date);
  }
 }

 public static String format(Date date) {
  return format(date, null);
 }

 public static Date parseUseDefaultFormat(String date) {
  return parse(date, getDayFormatter());
 }

 public static Date parse(String date, DateFormat df) {
  try {
   return df.parse(date);
  } catch (ParseException e) {
   throw new RuntimeException("parse date [" + date
     + "] failed in use [" + getDayFormatter() + "]", e);
  }
 }

 // 增加或减少几个月
 public static Date addMonth(Date date, int num) {
  Calendar startDT = Calendar.getInstance();
  startDT.setTime(date);
  startDT.add(Calendar.MONTH, num);
  return startDT.getTime();
 }

 // 增加或减少天数
 public static Date addDay(Date date, int num) {
  Calendar startDT = Calendar.getInstance();
  startDT.setTime(date);
  startDT.add(Calendar.DAY_OF_MONTH, num);
  return startDT.getTime();
 }

 public static List<Date> splitDays(Date start, Date end) {
  return splitDays(start, end, null);
 }

 /**
  * 
  * @param start
  * @param end
  * @param dayOfWeeks
  *            周日(1), 周一(2), ..., 周六(7)
  * @return
  */
 @SuppressWarnings("deprecation")
 public static List<Date> splitDays(Date start, Date end, int[] dayOfWeeks) {
  List<Date> dates = new ArrayList<Date>();
  for (Date date = start; !date.after(end); date = addDay(date, 1)) {
   if (ArrayUtils.isEmpty(dayOfWeeks)
     || ArrayUtils.contains(dayOfWeeks, date.getDay() + 1)) {
    dates.add(date);
   }
  }
  return dates;
 }

 /**
  * 取得时间距阵
  * 
  * @param dayStart
  * @param dayEnd
  * @return
  */
 public static List<String> getDayPeriodFullMatrix(String dayStart,
   String dayEnd) {

  List<String> retList = new ArrayList<String>();
  Calendar calStart = new GregorianCalendar();
  Calendar calEnd = new GregorianCalendar();
  String str = null;
  try {
   calStart.setTime(getDayFormatter().parse(dayStart));
   calEnd.setTime(getDayFormatter().parse(dayEnd));
   calEnd.add(Calendar.DATE, 1); // 包含最后一天

   // 前端补足
   int dayOfWeek = calStart.get(Calendar.DAY_OF_WEEK);
   for (; dayOfWeek > 1; dayOfWeek--) {
    retList.add(MATRIX_NULL_FLAG);
   }

   // 中间部分
   for (; calStart.before(calEnd); calStart.add(Calendar.DATE, 1)) {
    str = FAST_DAY_FORMATTER.format(calStart.getTime());
    retList.add(str);
   }

   // 后端补足
   dayOfWeek = calEnd.get(Calendar.DAY_OF_WEEK);
   if (dayOfWeek != 1) {
    for (; dayOfWeek != 1 && dayOfWeek <= 7; dayOfWeek++) {
     retList.add(MATRIX_NULL_FLAG);
    }
   }
   if(retList.size()<42) {
    int length=42-retList.size();
    for(int i=0;i<length;i++) {
     retList.add(MATRIX_NULL_FLAG);
     System.out.println(i);
    }
   }
  } catch (ParseException e) {
   throw new RuntimeException(e);
  }

  return retList;
 }

 /**
  * 取得时间距阵
  * 
  * @param dayStart
  * @param dayEnd
  * @return
  */
 public static List<String> getDayPeriodFullMatrix(Date dayStart, Date dayEnd) {
  return getDayPeriodFullMatrix(format(dayStart), format(dayEnd));
 }

 /**
  * <li>SimpleDateFormat is not thread saft, so when you need, you should
  * create it</li>
  */
 public static SimpleDateFormat getDayFormatter() {
  return new SimpleDateFormat("yyyy-MM-dd");
 }

 public static SimpleDateFormat getMinuteFormatter() {
  return new SimpleDateFormat("yyyy-MM-dd HH:mm");
 }

 public static SimpleDateFormat getMonthFormatter() {
  return new SimpleDateFormat("yyyy-MM");
 }

 public static SimpleDateFormat getSecondFormatter() {
  return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 }

 public static void main(String[] args) {
  List<String> matrix = getDayPeriodFullMatrix("2010-02-01", "2010-02-28");
  System.out.println(matrix);
  System.out.println(matrix.size());
  Date time1 = parse("2009-09-26 09:00:23", getSecondFormatter());
  Date time2 = parse("2009-09-27 09:00:24", getSecondFormatter());
  System.out.println(getQuoteIgnoreTime(time1, time2));
 }

 /**
  * 字符串格式时间转换到对象时间
  * 
  * @param str
  * @return
  */
 public static Date string2DateTime(String str) {
  SimpleDateFormat fo = new SimpleDateFormat("yyyy-MM-dd");
  Date date = new Date();
  try {
   date = fo.parse(str);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return date;
 }

 /**
  * 返回date时间 只到天 2008-05-20 00:00
  * 
  * @param date
  * @return
  */
 public static Date getNoHHMMDate(Date date) {
  return org.apache.commons.lang.time.DateUtils.truncate(date,
    Calendar.DATE);
 }

 /**
  * 增加天
  * 
  * @param date
  * @param i
  * @return
  */
 public static Date addDays(Date date, int i) {
  return org.apache.commons.lang.time.DateUtils.addDays(date, i);
 }

 public static long diff(Date d1, Date d2, String field) {
  long d1t = d1.getTime();
  long d2t = d2.getTime();
  if ("middleNight".equalsIgnoreCase(field)) { // 计算间夜,先除后减
   return d1t / MILSEC_PER_DAY - d2t / MILSEC_PER_DAY;
  } else {
   return d2t - d1t;
  }
 }

 public static String getLikeTimePointCode(Date myDate) {
  String myTime = formatDateMinutesTime(myDate);
  String[] myTimeList = myTime.split(":");
  return myTimeList[0] + myTimeList[1] + "00";
 }

 /**
  * 筛选日期(400系统)
  * 
  * @param start
  * @param end
  * @param dayOfWeeks
  * @return
  */
 public static List<Date> getDates(Date start, Date end, Integer[] dayOfWeeks) {
  List<Date> list = new ArrayList<Date>();
  Date date = start;
  for (int i = 1; i <= 7; i++) {
   if (ArrayUtils.contains(dayOfWeeks, dayOfWeek(date))) {
    while (date.compareTo(end) <= 0) {
     list.add(date);
     date = addDays(date, 7);
    }
    date = addDays(start, i);
   } else {
    date = addDays(date, 1);
   }
  }
  return list;
 }

 /**
  * 比较日期
  */
 public static boolean constractDate(Date d1, Date d2) {
  if (d1 == null || d2 == null)
   return false;
  Date date1 = string2DateTime(formatDate(d1));
  Date date2 = string2DateTime(formatDate(d2));
  if (date1.equals(date2))
   return true;
  return date1.before(date2);
 }

 /**
  * 星期几
  * 
  * @param date
  * @return
  */
 public static int getWeekByDate(Date date) {
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return cal.get(Calendar.DAY_OF_WEEK);
 }

 /**
  * 比较两日期是否相等
  */
 public static boolean equalDate(Date d1, Date d2) {
  if (d1 == null || d2 == null)
   return false;
  Date date1 = string2DateTime(formatDate(d1));
  Date date2 = string2DateTime(formatDate(d2));
  return date1.equals(date2);
 }

 /**
  * 将某个日期转换成业务逻辑上面的星期几 calendar: 周一:2;周二:3;周三:4;周四:5;周五:6;周六:7;周日:1 业务逻辑 :
  * 周一:1;周二:2;周三:3;周四:4;周五:5;周六:6;周日:7
  * 
  * @param day
  * @return
  */
 public static String explainDayOfWeek(Date date) {
  int departDay = dayOfWeek(date);
  if (departDay == 1) {
   return "7";
  } else if (departDay == 2) {
   return "1";
  } else {
   return String.valueOf(departDay - 1);
  }
 }
 
 /**
  * 比较 是否当前日子以前的日子(不包含当前天) 
  */
 public static boolean gtAfter(Date date){
  return date.before(addDay(new Date(),-1));
 }
}

 

你可能感兴趣的:(apache,thread)