时间相关常用的方法


public class TimeUtils {

   private static DateFormat dayDf = new SimpleDateFormat("yyyy-MM-dd");

   /**
    * 获取系统时间-年
    * 
    * @return
    */
   public static int getYear() {
      return Calendar.getInstance().get(Calendar.YEAR);
   }

   /**
    * 获取系统时间-月
    *
    * @return
    */
   public static int getMonth() {
      return Calendar.getInstance().get(Calendar.MONTH) + 1;
   }

   /**
    * 获取系统时间-周
    *
    * @return
    */
   public static int getWeek() {
      return Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);
   }

   /**
    * 获取系统时间-日
    * 
    * @return
    */
   public static int getDay() {
      return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
   }

   /**
    * 获取系统的时间-小时
    * @return
    */
   public static int getHour() {
      return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
   }

   /**
    * 获取系统时间-分钟
    * @return
    */
   public static int getMinute() {
      return Calendar.getInstance().get(Calendar.MINUTE);
   }

   /**
    * 获取系统时间-秒
    * @return
    */
   public static int getSecond() {
      return Calendar.getInstance().get(Calendar.SECOND);
   }

   /**
    * 由字符串解析得到时间
    * 
    * @param date
    * @return
    */
   public static Date getDateFromString(String date) {
      Date tDate = null;
      try {
         tDate = dayDf.parse(date);
      } catch (ParseException e) {
         e.printStackTrace();
      }
      return tDate;
   }

   /**
    * 由字符串解析得到时间
    *
    * @param date
    * @return
    */
   public static Date getDateFromString(DateFormat format,String date) {
      Date tDate = null;
      try {
         tDate = format.parse(date);
      } catch (ParseException e) {
         e.printStackTrace();
      }
      return tDate;
   }
   /**
    * 获得年月日
    *
    * @return
    */
   public static String getYMD() {
      return getYear()+"-"+getMonth()+"-"+getDay();
   }

   /**
    * 获得年月日时分秒
    * @return
     */
   public static String getYMDHms() {
      return getYear()+"-"+getMonth()+"-"+getDay()+" "+getHour()+":"+getMinute()+":"+getSecond();
   }

   /**
    * 比较时间早晚
    * 
    * @param date1
    * @param date2
    * @return 如果date2比date1早,返回true
    */
   public static boolean isEarly(Date date1, Date date2) {
      if (date1.getTime() - date2.getTime() > 0) {
         return true;
      }
      return false;
   }

   /**
    * 比较两个日期字符串的早晚
    * @param dateStr1
    * @param dateStr2
     * @return 如果dateStr2比dateStr1早,返回true
     */
   public static boolean isDateEarly(String dateStr1,String dateStr2){
      DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
      Date date1 = null;
      Date date2 = null;
      try {
         date1 = df.parse(dateStr1);
         date2 = df.parse(dateStr2);
         return isEarly(date1,date2);
      } catch (ParseException e) {
         e.printStackTrace();
      }

      return false;
   }

   /**
    * 比较两个时间字符串的早晚
    * @param timeStr1
    * @param timeStr2
     * @return 如果dateStr2比dateStr1早,返回true
     */
   public static boolean isTimeEarly(String timeStr1,String timeStr2){
      DateFormat df = new SimpleDateFormat("HH:mm:ss");
      Date date1 = null;
      Date date2 = null;
      try {
         date1 = df.parse(timeStr1);
         date2 = df.parse(timeStr2);
         return isEarly(date1,date2);
      } catch (ParseException e) {
         e.printStackTrace();
      }

      return false;
   }

   /**
    * 比较两个日期时间字符串的早晚
    * @param DateTimeStr1
    * @param DateTimeStr2
     * @return 如果dateStr2比dateStr1早,返回true
     */
   public static boolean isDateTimeEarly(String DateTimeStr1,String DateTimeStr2){
      DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date1 = null;
      Date date2 = null;
      try {
         date1 = df.parse(DateTimeStr1);
         date2 = df.parse(DateTimeStr2);
         return isEarly(date1,date2);
      } catch (ParseException e) {
         e.printStackTrace();
      }

      return false;
   }

   /**
    * 比较两个时间字符串的间隔早晚
    * @param timeStr1
    * @param timeStr2
    * @param seconds
     * @return 如果 dateStr2 比 dateStr1+间隔 早,返回true
     */
   public static boolean isTimeIntervalEarly(String timeStr1,String timeStr2,int seconds){
      DateFormat df = new SimpleDateFormat("HH:mm:ss");
      Date date1 = null;
      Date date2 = null;
      try {
         date1 = df.parse(timeStr1);
         date2 = df.parse(timeStr2);
         if (date1.getTime()+seconds*1000 - date2.getTime() > 0) {
            return true;
         }
      } catch (ParseException e) {
         e.printStackTrace();
      }

      return false;
   }

   /**
    * 得到每个月的天数
    * 
    * @param year
    *            查询的年
    * @param month
    *            查询的月
    * @return
    */
   public static int getDayCountByYearAndMonth(int year, int month) {
      int day = 30;
      boolean flag = false;
      switch (year % 4) {
      case 0:
         flag = true;
         break;
      default:
         flag = false;
         break;
      }
      switch (month) {
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
         day = 31;
         break;
      case 2:
         day = flag ? 29 : 28;
         break;
      default:
         day = 30;
         break;
      }
      return day;
   }

   /**
    * 根据年月日得到前一天
    * 
    * @param year
    * @param month
    * @param day
    * @return 数组,0-年,1-月,2-日
    */
   public static int[] getPreviousDay(int year, int month, int day) {
      int[] previousDay = new int[3];
      if (day == 1) {
         if (month == 1) {
            year = year - 1;
            month = 12;
            day = TimeUtils.getDayCountByYearAndMonth(year, month);
         } else {
            month = month - 1;
            day = TimeUtils.getDayCountByYearAndMonth(year, month);
         }

      } else {
         day = day - 1;
      }
      previousDay[0] = year;
      previousDay[1] = month;
      previousDay[2] = day;
      return previousDay;
   }

   /**
    * 根据年月日得到下一天
    * 
    * @param year
    * @param month
    * @param day
    * @return 数组,0-年,1-月,2-日
    */
   public static int[] getNextDay(int year, int month, int day) {
      int[] nextDay = new int[3];

      int mDayMaxByMonth = TimeUtils.getDayCountByYearAndMonth(year, month);

      if (day < mDayMaxByMonth) {
         day++;
      } else {
         if (month < 12) {
            month++;
         } else {
            year++;
            month = 1;
         }
         day = 1;
      }

      nextDay[0] = year;
      nextDay[1] = month;
      nextDay[2] = day;
      return nextDay;
   }

   /**
    * 根据年月日得到该月最后一天
    * @param year
    * @param month
    * @return
    */
   public static int getLastDay(int year, int month) {
      int day = 30;
      boolean flag = false;
      switch (year % 4) {
      case 0:
         flag = true;
         break;
      default:
         flag = false;
         break;
      }
      switch (month) {
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
         day = 31;
         break;
      case 2:
         day = flag ? 29 : 28;
         break;
      default:
         day = 30;
         break;
      }
      return day;
   }
   /**
    * 取得指定日期所在周的第一天
    *
    * @param date
    * @return
    */
   public static Date getFirstDayOfWeek(Date date) {
      Calendar c = new GregorianCalendar();
      c.setFirstDayOfWeek(Calendar.MONDAY);
      c.setTime(date);
      c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
      return c.getTime ();
   }
   /**
    * 取得指定日期所在周的最后一天
    *
    * @param date
    * @return
    */
   public static Date getLastDayOfWeek(Date date) {
      Calendar c = new GregorianCalendar();
      c.setFirstDayOfWeek(Calendar.MONDAY);
      c.setTime(date);
      c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
      return c.getTime();
   }
   /**
    * 得到某年某周的第一天
    *
    * @param year
    * @param week
    * @return
    */
   public static Date getFirstDayOfWeek(int year, int week) {
      Calendar c = new GregorianCalendar();
      c.set(Calendar.YEAR, year);
      c.set(Calendar.MONTH, Calendar.JANUARY);
      c.set(Calendar.DATE, 1);

      Calendar cal = (GregorianCalendar) c.clone();
      cal.add(Calendar.DATE, week * 7);

      return getFirstDayOfWeek(cal.getTime());
   }

   /**
    * 得到某年某周的最后一天
    *
    * @param year
    * @param week
    * @return
    */
   public static Date getLastDayOfWeek(int year, int week) {
      Calendar c = new GregorianCalendar();
      c.set(Calendar.YEAR, year);
      c.set(Calendar.MONTH, Calendar.JANUARY);
      c.set(Calendar.DATE, 1);

      Calendar cal = (GregorianCalendar) c.clone();
      cal.add(Calendar.DATE , week * 7);

      return getLastDayOfWeek(cal.getTime());
   }

   // 获取当前时间所在年的最大周数
   public static int getMaxWeekNumOfYear(int year) {
      Calendar c = new GregorianCalendar();
      c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

      return getWeekOfYear(c.getTime());
   }
   // 获取当前时间所在年的周数
   public static int getWeekOfYear(Date date) {
      Calendar c = new GregorianCalendar();
      c.setFirstDayOfWeek(Calendar.SUNDAY);
      c.setMinimalDaysInFirstWeek(1);
      c.setTime(date);

      return c.get(Calendar.WEEK_OF_YEAR);
   }

   /**
    * 获得两个日子之间的所有日期
    * @param startDay
    * @param endDay
    */
   public static List<String> getDaysBetweenTwo(Date startDay, Date endDay) {
      Calendar startDayC = Calendar.getInstance();
      Calendar endDayC = Calendar.getInstance();
      startDayC.setTime(startDay);
      endDayC.setTime(endDay);

      List<String> dates = new ArrayList<String>();
      if (startDayC.compareTo(endDayC) >= 0) {
         return dates;
      }
      Calendar currentPrintDay = startDayC;
      while (true) {
         // 日期加一
         currentPrintDay.add(Calendar.DATE, 1);
         if (currentPrintDay.compareTo(endDayC) == 0) {
            break;
         }
         dates.add(dayDf.format(currentPrintDay.getTime()));
      }
      return dates;
   }

   public static String getPeriodOfWeek(int year, int week) {
      Date first = getFirstDayOfWeek(year, week);
      Date second = getLastDayOfWeek(year, week);

      String result = new SimpleDateFormat("MM/dd").format(first)+"-"+new SimpleDateFormat("MM/dd").format(second);

      return result;
   }

   /**
    * 将形式如:"00:00:00"的时间加一秒
    * @param time
    * @return
    */
   public static String getNextSecondTime(String time) {
      String[] times = time.split(":");
      int len = times.length;
      int second = Integer.valueOf(times[len - 1]);
      int minute = Integer.valueOf(times[len - 2]);
      int hour = len > 2 ? Integer.valueOf(times[len-3]) : 0;
      second++;
      if (second > 59) {
         minute++;
         second = second % 60;

         if (minute > 59) {
            hour++;
            minute = minute % 60;
         }
      }

      String sHour = hour > 9 ? String.valueOf(hour) : "0" + hour;
      String sMinute = minute > 9 ? String.valueOf(minute) : "0" + minute;
      String sSecond = second > 9 ? String.valueOf(second) : "0" + second;

      return len > 2 ? sHour + ":" + sMinute + ":" + sSecond : sMinute + ":" + sSecond;
   }


   public static String COURSE_CLICK_HOUR = "";
   public static String COURSE_CLICK_TIME = "";
   public static String PUSH_CLICK_TIME = "";

   public static String getTimeDiff(String start,String end){
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
      java.util.Date now = null;
      java.util.Date date = null;
      long hour;
      long min;
      try {
         now = df.parse(end);
         date=df.parse(start);
         long l=now.getTime()-date.getTime();
         long day=l/(24*60*60*1000);
         hour=(l/(60*60*1000)-day*24);
         min=((l/(60*1000))-day*24*60-hour*60);
         System.out.println(""+day+"天"+hour+"小时"+min+"分");
      } catch (ParseException e) {
         e.printStackTrace();
         return "";
      }
      if(hour == 0){
         return min+"分钟";
      }else{
         return hour+"小时"+min+"分钟";
      }
   }

   /***
    * 格式化时间
    * @return
    */
   public static String getDate(){
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
      String formatStr =formatter.format(new Date());
      return formatStr;
   }

   public static String getStringTimeToStringTime(String time){
      SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = null;
      try {
         date = format1.parse(time);
         SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd");
         return format2.format(date);
      } catch (ParseException e) {
         return time;
      }

   }

   /***
    * 获得时期时间
    * @return
    */
   public static String getDateTimeFromMills(String mills){
      try {
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         long lt = new Long(mills);
         Date date = new Date(lt);
         String formatStr =formatter.format(date);
         return formatStr;
      } catch (Exception e) {
         e.printStackTrace();
         return "";
      }
   }

   /**
    * 通过日期时间获得毫秒
    * @param dateTime
    * @return
     */
   public static long getMillsFromDateTime(String dateTime){
      try {
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date = formatter.parse(dateTime);
         return date.getTime();
      } catch (Exception e) {
         e.printStackTrace();
         return 0;
      }
   }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值