hello,world!时间相关操作

(JAVA)时间相关辅助类

2016-10-14  本文已影响64人  霙愔

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间处理相关辅助类<br>
 *
 * patternString相应的说明如下:<br>
 * y:年 ; M:月 ; d:日 ; <br>
 * H:时 ; m:分 ; s:秒 ; <br>
 * S:毫秒 <br>
 * E:星期几(这里多个E也只能显示一次(如:星期三)) <br>
 *
 * 多个相应的字母时,表示该值显示N位 <br>
 * 
 *
 * @since 2012-04-25
 *
 *
 */
public class DateRelatedUtils {
 /**
  * 实例化一个 Calendar 对象
  */
 private static Calendar calendar = Calendar.getInstance();

 /**
  * 将Date转换成相应的patternString格式
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return String
  *
  */
 public static String getFormattedDateAsString(Date basicDate,
   String patternString) {

  SimpleDateFormat dateFormater = new SimpleDateFormat(patternString);

  // 返回格式化后的时间串
  return dateFormater.format(basicDate);

 }

 /**
  * 返回加addDays天后的串,addDays可以为负数<br>
  * patternString:只能是年月日相应的不同格式
  *
  * @param basicDate
  *            时间
  * @param addDays
  *            加的天数
  * @param patternString
  * @return String
  */
 public static String addDaysAsString(Date basicDate, int addDays,
   String patternString) {

  // 得到加了天数后的时间
  basicDate = addDays(basicDate, addDays);

  // 返回相应格式的时间串
  return getFormattedDateAsString(basicDate, patternString);
 }

 /**
  * 计算两个日期相隔的天数<br>
  * 两个值不分前后,求绝对值
  *
  * @param firstDate
  * @param secondDate
  * @return Integer
  */
 public static int getGapDays(Date firstDate, Date secondDate) {

  // 先拿到两个日期 年月日 后边的时分秒不管了
  String patternString = "yyyy-MM-dd";
  String firstDateString = getFormattedDateAsString(firstDate,
    patternString);
  String secondDateString = getFormattedDateAsString(secondDate,
    patternString);

  // 转换成Date对象
  firstDate = getDateByDateString(firstDateString, patternString);
  secondDate = getDateByDateString(secondDateString, patternString);

  int nDays = (int) ((secondDate.getTime() - firstDate.getTime()) / (24 * 60 * 60 * 1000));

  return Math.abs(nDays);
 }

 /**
  * 计算两个日期相隔的天数
  *
  * @param firstString
  *            格式yyyy-MM-dd
  * @param secondString
  *            格式yyyy-MM-dd
  * @return Integer
  */
 public static int getGapDays(String firstString, String secondString) {
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  Date firstDate = null;
  Date secondDate = null;

  try {
   firstDate = df.parse(firstString);
   secondDate = df.parse(secondString);
  } catch (Exception e) {
   e.printStackTrace();
   // 日期型字符串格式错误
   throw new IllegalArgumentException("日期型字符串格式错误!");
  }

  return getGapDays(firstDate, secondDate);
 }

 /**
  * 将指定格式的日期串转化为日期对象
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            输入的时间串的格式
  * @return Date
  * @throws Exception
  */
 public static Date getDateByDateString(String basicDate,
   String patternString) {

  SimpleDateFormat df = new SimpleDateFormat(patternString);

  Date date = null;

  try {
   date = df.parse(basicDate);
  } catch (Exception ex) {
   throw new IllegalArgumentException("日期串与格式串不匹配或者格式串有误!");
  }

  return date;
 }

 /**
  * 得到basicDate这一年的第一天
  *
  * @return Date
  */
 public static Date getFirstDayOfYear(Date basicDate) {

  calendar.setTime(basicDate);
  calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
  calendar.set(Calendar.MONTH, Calendar.JANUARY);
  calendar.set(Calendar.DAY_OF_MONTH, 1);

  return calendar.getTime();

 }

 /**
  * 得到basicDate这一年的第一天
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            返回串格式
  * @return String
  */
 public static String getFirstDayOfYearAsString(Date basicDate,
   String patternString) {

  // 得到这一年的第一天
  basicDate = getFirstDayOfYear(basicDate);

  // 返回相应格式的时间串
  return getFormattedDateAsString(basicDate, patternString);

 }

 /**
  * 得到basicDate这一年的最后一天
  *
  * @param basicDate
  *            时间
  * @return Date
  */
 public static Date getLastDayOfYear(Date basicDate) {

  calendar.setTime(basicDate);
  calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
  calendar.set(Calendar.MONTH, Calendar.DECEMBER);
  calendar.set(Calendar.DAY_OF_MONTH, 31);

  return calendar.getTime();

 }

 /**
  * 得到basicDate这一年的最后一天
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            返回串格式
  * @return String
  */
 public static String getLastDayOfYearAsString(Date basicDate,
   String patternString) {

  // 得到这一年的最后一天
  basicDate = getLastDayOfYear(basicDate);

  // 返回相应的时间格式串
  return getFormattedDateAsString(basicDate, patternString);

 }

 /**
  * 得到basicDate 这一月的第一天
  *
  * @param basicDate
  *            时间
  * @return Date
  */
 public static Date getFirstDayOfMonth(Date basicDate) {

  calendar.setTime(basicDate);
  calendar.add(Calendar.MONTH, 0);
  calendar.set(Calendar.DAY_OF_MONTH, 1);

  return calendar.getTime();

 }

 /**
  * 得到basicDate 这一月的第一天
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return String
  */
 public static String getFirstDayOfMonthAsString(Date basicDate,
   String patternString) {
  // 得到这一月的第一天
  basicDate = getFirstDayOfMonth(basicDate);
  // 返回相应的时间格式串
  return getFormattedDateAsString(basicDate, patternString);
 }

 /**
  * 得到basicDate 这一月的最后一天
  *
  * @param basicDate
  *            时间
  * @return Date
  */
 public static Date getLastDayOfMonth(Date basicDate) {

  calendar.setTime(basicDate);
  calendar.add(Calendar.MONTH, 1);
  calendar.set(Calendar.DAY_OF_MONTH, 1);
  calendar.add(Calendar.DAY_OF_MONTH, -1);

  return calendar.getTime();

 }

 /**
  * 得到basicDate 这一月的最后一天
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return String
  */
 public static String getLastDayOfMonthAsString(Date basicDate,
   String patternString) {
  // 得到这一月的最后一天
  basicDate = getLastDayOfMonth(basicDate);
  // 返回相应的时间格式串
  return getFormattedDateAsString(basicDate, patternString);
 }

 /**
  * 得到basicDate的下个月初
  *
  * @param basicDate
  *            时间
  * @return Date
  */
 public static Date getFirstDayOfLastMonth(Date basicDate) {

  calendar.setTime(basicDate);
  calendar.add(Calendar.MONTH, 1);
  calendar.set(Calendar.DAY_OF_MONTH, 1);

  return calendar.getTime();

 }

 /**
  * 得到basicDate 下一月月初
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return String
  */
 public static String getFirstDayOfLastMonthAsString(Date basicDate,
   String patternString) {
  // 得到下月月初
  basicDate = getFirstDayOfLastMonth(basicDate);
  // 返回相应的时间格式串
  return getFormattedDateAsString(basicDate, patternString);
 }

 /**
  * 按中国人的习惯 得到basicDate 这周的第一天(周一)
  *
  * @param basicDate
  *            时间
  * @return Date
  */
 public static Date getFirstDayOfWeekAsDateForChinese(Date basicDate) {

  calendar.setTime(basicDate);
  if(calendar.get(Calendar.DAY_OF_WEEK) != 1) {
   calendar.add(Calendar.DAY_OF_MONTH, 0);
   calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
  } else {
   calendar.setTime(addDays(basicDate, -6));
  }

  return calendar.getTime();

 }

 /**
  * 按中国人的习惯得到basicDate 这周的第一天(周一)
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return String
  */
 public static String getFirstDayOfWeekAsStringForChinese(Date basicDate,
   String patternString) {
  // 得到这周第一天
  basicDate = getFirstDayOfWeekAsDateForChinese(basicDate);
  // 返回相应的时间格式串
  return getFormattedDateAsString(basicDate, patternString);
 }

 /**
  * 按中国人的习惯得到basicDate 这周的最后一天(周日)
  *
  * @param basicDate
  *            时间
  * @return Date
  */
 public static Date getLastDayOfWeekAsDateForChinese(Date basicDate) {

  calendar.setTime(basicDate);
  
  if(calendar.get(Calendar.DAY_OF_WEEK) != 1) {
   calendar.add(Calendar.DAY_OF_MONTH, 0);
   calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
   calendar.add(Calendar.DAY_OF_MONTH, 6);
  }

  return calendar.getTime();

 }

 /**
  * 按中国人的习惯得到basicDate 这周的最后一天(周日)
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return String
  */
 public static String getLastDayOfWeekAsStringForChinese(Date basicDate,
   String patternString) {
  // 得到这周最后一天
  basicDate = getLastDayOfWeekAsDateForChinese(basicDate);
  // 返回相应的时间格式串
  return getFormattedDateAsString(basicDate, patternString);
 }

 /**
  * 按美国人习惯得到 basicDate 这周的第一天(周日为一周的第一天)
  *
  * @param basicDate
  * @return
  */
 public static Date getFirstDayOfWeekAsDate(Date basicDate) {
  if (basicDate == null) {
   return null;
  } else {
   calendar.setTime(basicDate);
   int weekindex = calendar.get(7);
   Date firstDay = addDays(basicDate, (weekindex - weekindex * 2) + 1);
   return firstDay;
  }
 }

 /**
  * 按美国人习惯得到 basicDate 这周的第一天(周日为一周的第一天)
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return
  */
 public static String getFirstDayOfWeekAsString(Date basicDate,
   String patternString) {
  if (basicDate == null) {
   return null;
  } else {
   Date firstDay = getFirstDayOfWeekAsDate(basicDate);
   return getFormattedDateAsString(firstDay, patternString);
  }
 }

 /**
  * 按美国人习惯得到 basicDate 这周的最后一天(周六为一周的最后一天)
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static Date getLastDayOfWeekAsDate(Date basicDate) {
  if (basicDate == null) {
   return null;
  } else {
   calendar.setTime(basicDate);
   int weekindex = calendar.get(7);
   Date lastDay = addDays(basicDate, 7 - weekindex);
   return lastDay;
  }
 }

 /**
  * 按美国人习惯得到 basicDate 这周的最后一天(周六为一周的最后一天)
  *
  * @param basicDate
  *            时间
  * @param patternString
  *            格式
  * @return
  */
 public static String getLastDayOfWeekAsString(Date basicDate,
   String patternString) {
  if (basicDate == null) {
   return null;
  } else {
   Date lastDay = getLastDayOfWeekAsDate(basicDate);
   return getFormattedDateAsString(lastDay, patternString);
  }
 }

 /**
  * 判断是否润年<br>
  * <br>
  * &nbsp;&nbsp;true 是闰年<br>
  * &nbsp;&nbsp;false 不是闰年
  *
  * @param basicDate
  *            时间
  * @return boolean
  */
 public static boolean isLeapYear(Date basicDate) {
  /*
   * 1.被400整除是闰年 2.不能被400整除的且能被4整除且不能被100整除的是闰年 3.其他的都不是闰年
   */
  // 默认不是闰年
  boolean flag = false;

  calendar.setTime(basicDate);

  int year = calendar.get(Calendar.YEAR);

  /* 判断各种是闰年的情况修改flag的值 */
  // 能被400整除
  if ((year % 400) == 0) {
   flag = true;
   // 能被4整除 && 不能被100整除则是闰年
  } else if ((year % 4) == 0 && (year % 100) != 0) {
   flag = true;
  }

  // 其他情况都不是闰年

  return flag;
 }

 /**
  * 返回basicDate 是 星期几
  *
  * @param basicDate
  *            时间
  * @return String
  */
 public static String getDayOfWeekByDate(Date basicDate) {
  return getFormattedDateAsString(basicDate, "E");
 }

 /**
  * 得到年份
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static int getYear(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar.get(Calendar.YEAR);
 }

 /**
  * 得到月份
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static int getMonth(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar.get(Calendar.MONTH) + 1;
 }

 /**
  * 得到日
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static int getDay(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar.get(Calendar.DATE);
 }

 /**
  * 得到时
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static int getHour(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar.get(Calendar.HOUR_OF_DAY);
 }

 /**
  * 得到分
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static int getMinute(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar.get(Calendar.MINUTE);
 }

 /**
  * 得到秒
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static int getSecond(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar.get(Calendar.SECOND);
 }

 /**
  * 得到年龄
  *
  * @param birthDate
  *            出生日期
  * @return
  */
 public static int getAge(Date birthDate) {

  if (getYear(new Date()) - getYear(birthDate) < 0) {
   throw new IllegalArgumentException("生日小于当前日期");
  }

  return getYear(new Date()) - getYear(birthDate);
 }

 /**
  * 根据Date得到Calendar对象
  *
  * @param basicDate
  *            时间
  * @return Calendar
  */
 public static Calendar getCalendarByDate(Date basicDate) {
  calendar.setTime(basicDate);
  return calendar;
 }

 /**
  * 根据Calendar得到Date
  *
  * @param thiscalendar
  *            Calendar對象
  * @return
  */
 public static Date getDateByCalendar(Calendar thiscalendar) {
  return thiscalendar.getTime();
 }

 /**
  * 辅助用于在日期上加时间
  *
  * @param date
  * @param calendarField
  * @param amount
  * @return
  */
 private static Date add(Date date, int calendarField, int amount) {
  if (date == null) {
   throw new IllegalArgumentException("The date must not be null!");
  } else {
   calendar.setTime(date);
   calendar.add(calendarField, amount);
   return calendar.getTime();
  }
 }

 /**
  * 在时间上加年
  *
  * @param basicDate
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addYears(Date basicDate, int amount) {
  return add(basicDate, Calendar.YEAR, amount);
 }

 /**
  * 在时间上加月
  *
  * @param basicDate
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addMonths(Date basicDate, int amount) {
  return add(basicDate, Calendar.MONTH, amount);
 }

 /**
  * 在时间上加周
  *
  * @param basicDate
  *            时间
  * @param amount
  *            增量
  * @return
  */
 public static Date addWeeks(Date basicDate, int amount) {
  return add(basicDate, Calendar.WEEK_OF_YEAR, amount);
 }

 /**
  * 在时间上加天数
  *
  * @param basicDate
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addDays(Date basicDate, int amount) {

  return add(basicDate, Calendar.DATE, amount);
 }

 /**
  * 在时间上加小时
  *
  * @param basicDate
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addHours(Date basicDate, int amount) {
  return add(basicDate, Calendar.HOUR_OF_DAY, amount);
 }

 /**
  * 在时间上加分
  *
  * @param basicDate
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addMinutes(Date basicDate, int amount) {
  return add(basicDate, Calendar.MINUTE, amount);
 }

 /**
  * 在时间上加秒
  *
  * @param date
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addSeconds(Date date, int amount) {
  return add(date, Calendar.SECOND, amount);
 }

 /**
  * 在时间上加毫秒
  *
  * @param date
  *            时间
  * @param amount
  *            增量
  * @return Date
  */
 public static Date addMilliseconds(Date date, int amount) {
  return add(date, Calendar.MILLISECOND, amount);
 }

 /**
  * 将秒转换成 HH:mm:ss 格式
  *
  * @param seconds
  * @return
  */
 public static String getHHmmss(long seconds) {

  long h = seconds / 3600L;
  long j = seconds % 3600L;
  long m = j / 60L;
  long s = j % 60L;

  String hh = String.valueOf(h);
  String mm = String.valueOf(m);
  String ss = String.valueOf(s);

  if (hh.length() < 2) {
   hh = (new StringBuilder("0")).append(hh).toString();
  }
  if (mm.length() < 2) {
   mm = (new StringBuilder("0")).append(mm).toString();
  }
  if (ss.length() < 2) {
   ss = (new StringBuilder("0")).append(ss).toString();
  }
  return (new StringBuilder(String.valueOf(hh))).append(":").append(mm)
    .append(":").append(ss).toString();

 }

 /**
  * 根据时间得到相应的long值
  *
  * @param basicDate
  *            时间
  * @return
  */
 public static long getTimeMillisByDate(Date basicDate) {
  return basicDate.getTime();
 }

 /**
  * 生成(>=min&&<=max)随机数
  *
  * @param min
  * @param max
  * @return
  */
 public static long getRondom(long min, long max) {
  return (long) (Math.random() * (max - min) + min);
 }

 /**
  * 得到当前时间串
  *
  * @return
  */
 public static String getCurrentDateString() {
  return getFormattedDateAsString(new Date(), "yyyy-MM-dd HH:mm:ss");
 }

 /**
  * 判断是否周末(周六、周天)
  *
  * @param basicDate
  * @return
  */
 public static boolean isWeekEnd(Date basicDate) {
  boolean flag = false;

  calendar = getCalendarByDate(basicDate);
  int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
  if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
   flag = true;
  }

  return flag;
 }

 /**
  * 在源日期(basicDate)基础上加上amount个工作日(除去周六和周日)
  *
  * @param basicDate
  * @param amount
  * @return
  */
 public static Date addWorkDays(Date basicDate, int amount) {

  calendar = getCalendarByDate(basicDate);
  // 是否周末(周六和周日) 标识
  boolean weekEndFlag = false;

  for (int i = 0; i < amount; i++) {

   // 把源日期加一天
   calendar.add(Calendar.DAY_OF_MONTH, 1);

   // 判断是否周末
   weekEndFlag = isWeekEnd(calendar.getTime());

   // 是周末的话,时间照加,但是i的值不算数,就倒退 1
   if (weekEndFlag) {
    i--;
   }
  }
  return calendar.getTime();
 }
 
 /*public static void main(String args[]) {
  System.out.println();
 }*/
 
}

上一篇 下一篇

猜你喜欢

热点阅读