美文网首页hello,world!时间相关操作
(JAVA)时间相关辅助类

(JAVA)时间相关辅助类

作者: 霙愔 | 来源:发表于2016-10-14 16:34 被阅读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();
     }*/
     
    }

    相关文章

      网友评论

        本文标题:(JAVA)时间相关辅助类

        本文链接:https://www.haomeiwen.com/subject/qrtnyttx.html