不常用获取日期方法

虽然有些不常用,但是万一用到了呢


public class DateTimeUtil {
   public static final String YYYY_MM_DD = "yyyy-MM-dd";
   public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
   private static Logger logger = LoggerFactory.getLogger(DateTimeUtil.class);
   private DateTimeUtil() {
   }
   /**
    * 增加天数
    *
    * @version : Ver 1.0
    * @author     : <a href="mailto:[email protected]">sunxs</a>  
    * @date   :2016-6-30 下午5:52:28
    * @param oldDate
    * @param day
    * @return
    */
   public static Date addDay(Date oldDate,int day){
      DateTime dateTime = new DateTime(oldDate);
      dateTime = dateTime.plusDays(day);
      return dateTime.toDate();
   }


   /**
    * 将日期型转换为指定格式的字符串
    *
    * @param date
    *            日期
    * @param format
    *            格式
    * @return
    */
   public static String formatDate(Date date, String format) {
      Preconditions.checkNotNull(date);
      Preconditions.checkArgument(StringUtils.isNotBlank(format));

      DateTime dateTime = new DateTime(date);
      return dateTime.toString(format);
   }


   /**
    * 将日期型转换为指定格式的字符串
    *
    * @param date
    *            日期 默认format yyyy-MM-dd HH:mm:ss
    * @return
    */
   public static String formatDate(Date date) {
      return formatDate(date,"yyyy-MM-dd HH:mm:ss");
   }

   /**
    * 将日期型转换为指定格式的字符串
    *
    * @param date
    *            日期 默认format yyyy-MM-dd
    * @return
    */
   public static String formatDateEndWithDay(Date date) {
      return formatDate(date,"yyyy-MM-dd");
   }


   /**
    * 将字符串转化成时间
    * @param timeStr
    * @param formatStr
    * @return
    */
   public static Date strToDate(String timeStr, String formatStr) throws Exception {
      DateTimeFormatter format = DateTimeFormat.forPattern(formatStr);
      DateTime dateTime = DateTime.parse(timeStr, format);
      return dateTime.toDate();
   }

   /**
    * 将字符串转化成时间,默认传入的时间格式为 yyyy-MM-dd HH:mm:ss
    * @param timeStr
    * @return
    */
   public static Date strToDate (String timeStr) throws Exception {
      if(StringUtils.isBlank(timeStr)){
         timeStr = "1900-01-01 00:00:00";
      }
      return strToDate(timeStr, YYYY_MM_DD_HH_MM_SS);
   }
   
   /**
    * 获取某个月的第一天
    * @param date 时间
    * @param pattern 格式
    * @return
    */
   public static String getFirstDayOfMonth(Date date, String pattern){
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));
      return new DateTime(c).toString(pattern);
   }
   
   /**
    * 获取该月的最后一天
    * @param date
    * @param pattern
    * @return
    */
   public static String getLastDayOfMonth(Date date, String pattern){
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
      return new DateTime(c).toString(pattern);
   }
   
   /**
    * 计算两个日期的月份差值
    * @param start
    * @param end
    * @return
    */
   public static int getMonthMinusOfDate(Date start, Date end){
      Calendar c = Calendar.getInstance();
      c.setTime(start);
      int num = c.get(Calendar.MONTH);
      c.clear();
      c.setTime(end);
      return num-c.get(Calendar.MONTH);
   }

   /**
    * 加/减分钟
    * @param date
    * @param i
    * @return
    */
   public static Date addMin(Date date,int i)
   {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);
      cal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE) + i);
      return cal.getTime();
   }
   /**
    * 将秒差转化成时分
    * @param second 秒 "6000"
    * @return "1小时40分"
    * http://blog.csdn.net/fuxiaohui/article/details/25505823
    */
   public static String formatTimeBySecond(long second) {
      long ms=second*1000;
      Integer ss = 1000;
      Integer mi = ss * 60;
      Integer hh = mi * 60;
      Integer dd = hh * 24;
      Long day = ms / dd;
      Long hour = (ms - day * dd) / hh;
      Long minute = (ms - day * dd - hour * hh) / mi;
      StringBuilder sb = new StringBuilder();
      hour+=day*24;
      sb.append(hour+"小时");
      sb.append(minute+"分钟");
      return sb.toString();
   }

   /**
    * 将一个日期字符串转化成日期
    *
    * @param strDate
    *            String
    * @return Date yyyy-mm-dd
    */
   public static Date convertStringToDate(String strDate) {
      Date date = null;
      try {
         SimpleDateFormat df = new SimpleDateFormat(YYYY_MM_DD);
         date = df.parse(strDate);

      } catch (Exception e) {
         logger.error(e.getMessage(),e);
      }
      return date;
   }

   /**
    * 返回某段时间内 每一天
    *
    * @param beginDateStr
    * @param currEndDateStr
    * @return
    */
   public static List<String> getScopeDays(String beginDateStr, String currEndDateStr) {
      Date beginDate = convertStringToDate(beginDateStr);
      String endDateStr = getDayAfterSpecificDate(currEndDateStr, 1);
      Date endDate = convertStringToDate(endDateStr);
      List<String> dateList = new ArrayList<String>();
      SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD);
      Date currentDate = setDate(beginDateStr);
      if (currentDate.before(beginDate)) {
         currentDate = beginDate;
      }
      String currentDateStr = sdf.format(currentDate);
      while (currentDate.before(endDate)) {
         dateList.add(currentDateStr);
         currentDateStr = getDayAfterSpecificDate(currentDateStr, 1);
         currentDate = convertStringToDate(currentDateStr);
      }
      return dateList;
   }
   /**
    * 取得某个时间后n天,格式为yyyy-mm-dd
    *
    * @param strDate
    *            String
    * @param day
    *            int
    * @return yyyy-mm-dd
    */
   public static String getDayAfterSpecificDate(String strDate, int day) {
      Calendar c = convertDateStringToCalendar(strDate);
      c.add(Calendar.DAY_OF_MONTH, day);
      return convertDateToString(convertStringToDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE)));
   }
   /**
    * 将一个日期字符串转化成Calendar
    *
    * @param strDate
    *            String
    * @return Calendar
    */
   public static Calendar convertDateStringToCalendar(String strDate) {
      Date date = convertStringToDate(strDate);
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      return c;
   }
   /**
    * 将日期转化为字符串
    *
    * @param date
    * @return
    */
   public static String convertDateToString(Date date) {
      SimpleDateFormat dateFormat = new SimpleDateFormat(YYYY_MM_DD);
      return dateFormat.format(date);
   }

   /**
    * 设置是某一天
    * @param time
    * @return
    */
   public static Date setDate(String time) {
      String[] timeArray = time.split("-");
      String year = timeArray[0];
      String month = timeArray[1];
      String day = timeArray[2];
      Calendar instance = Calendar.getInstance();
      instance.set(Integer.parseInt(year),
            Integer.parseInt(month) - 1,
            Integer.parseInt(day));
      return instance.getTime();
   }
   /** * 获取指定日期是星期几
    * 参数为null时表示获取当前日期是星期几
    * @param date
    * @return
    */
   public static String anotherWeekOfDate(Date date) {
      String[] weekOfDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
      Calendar calendar = Calendar.getInstance();
      if(date != null){
         calendar.setTime(date);
      }
      int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
      if (w < 0){
         w = 0;
      }
      return weekOfDays[w];
   }

   public static Date convertStringToDate(String strDate, String fm) {
      Date date = null;
      try {
         SimpleDateFormat df = new SimpleDateFormat(fm);
         date = df.parse(strDate);

      } catch (Exception e) {
         logger.error(e.getMessage(), e);
      }
      return date;
   }

   /**
    * 获得今日凌晨12点时间
    * @return
    */
   public static Date getTodayDate(){
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(new Date());
      calendar.set(Calendar.HOUR_OF_DAY, 0);
      calendar.set(Calendar.MINUTE, 0);
      calendar.set(Calendar.SECOND, 0);
      return calendar.getTime();
   }
   /**
    * 获得今日凌晨12点时间 字符串
    * @return
    */
   public static String getTodayDateString(){
      return  DateTimeUtil.formatDate(DateTimeUtil.getTodayDate(),"yyyy-MM-dd");
   }

   /**
    * 获取过去第几天的日期
    *
    * @param past
    * @return
    */
   public static String getPastDate(int past) {
      Calendar calendar = Calendar.getInstance();
      calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
      Date today = calendar.getTime();
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
      return format.format(today);
   }

   /**
    * 获取当月月1号0点0分0秒的时间
    * @return
    */
   public static String getNowFirstMonthDay() {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Calendar calendar = Calendar.getInstance();
      calendar.add(Calendar.MONTH, 0);
      calendar.set(Calendar.DAY_OF_MONTH, 1);
      //将小时至00
      calendar.set(Calendar.HOUR_OF_DAY, 00);
      //将分钟至00
      calendar.set(Calendar.MINUTE, 00);
      //将秒至00
      calendar.set(Calendar.SECOND,00);
      String newFirstDay = format.format(calendar.getTime());
      return newFirstDay;
   }

   /**
    * 获取上一个月1号0点0分0秒的时间
    */
   public static String getBeforeFirstMonthDay(){
      SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Calendar calendar=Calendar.getInstance();
      calendar.add(Calendar.MONTH, -1);
      calendar.set(Calendar.DAY_OF_MONTH, 1);
      //将小时至00
      calendar.set(Calendar.HOUR_OF_DAY, 00);
      //将分钟至00
      calendar.set(Calendar.MINUTE, 00);
      //将秒至00
      calendar.set(Calendar.SECOND,00);
      String beforeFirstMonthDay = format.format(calendar.getTime());
      return beforeFirstMonthDay;
   }

   /**
    * 获取上一个月最后一天23点59分59秒的时间
    */
   public static String getBeforeLastMonthDay() {
      SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Calendar calendar=Calendar.getInstance();
      int month=calendar.get(Calendar.MONTH);
      calendar.set(Calendar.MONTH, month-1);
      calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
      //将小时至23
      calendar.set(Calendar.HOUR_OF_DAY, 23);
      //将分钟至59
      calendar.set(Calendar.MINUTE, 59);
      //将秒至59
      calendar.set(Calendar.SECOND,59);
      String beforeLastMonthDay = sf.format(calendar.getTime());
      return beforeLastMonthDay;
   }

   /**
    * 获取当前时间的上月时间 yyyy-MM-dd HH:mm:ss
    */
   public static String getNowTimeBeforeMonthDay() {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Calendar c = Calendar.getInstance();
      c.setTime(new Date());
      c.add(Calendar.MONTH, -1);
      String newTimeBeforeMonthDay = format.format(c.getTime());
      return newTimeBeforeMonthDay;
   }

   /**
    * 获取某个月的天数
    */
   public static Integer getDaysOfMonth(Date date) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(date);
      return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
   }

   /**
    * 获取当前是本月第几天
    */
   public static Integer getDayOfMonth() {
      Calendar calendar = Calendar.getInstance();
      int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
      return dayOfMonth;
   }

   /**
    * 获取上月总天数
    */
   public static Integer getDaysOfMonth() {
      Calendar calendar = Calendar.getInstance();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      String format = sdf.format(new Date());
      try {
         calendar.setTime(sdf.parse(format));
         int thisMonth = calendar.get(Calendar.DAY_OF_MONTH);
         calendar.add(Calendar.MONTH, -1);
         return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
      } catch (Exception e) {
         logger.error("设置时间异常", e);
      }
      return 0;
   }

}

猜你喜欢

转载自blog.csdn.net/wfdfg/article/details/132746782