content: package com.yuu.ymall.commons.utils;
  
  import java.sql.Timestamp;
  import java.util.Calendar;
  import java.util.Date;
  import java.util.GregorianCalendar;
  
  /**
   * 时间工具类
   *
   * @author by Yuu
   * @classname TimeUtil
   * @date 2019/6/21 13:26
   */
  public class TimeUtil {
  
      /**
       * 获取本周的开始时间
       *
       * @return
       */
      public static Date getBeginDayOfWeek() {
          Date date = new Date();
          if (date == null) {
              return null;
          }
          Calendar cal = Calendar.getInstance();
          cal.setTime(date);
          int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
          if (dayofweek == 1) {
              dayofweek += 7;
          }
          cal.add(Calendar.DATE, 2 - dayofweek);
          return getDayStartTime(cal.getTime());
      }
  
      /**
       * 获取本周的结束时间
       *
       * @return
       */
      public static Date getEndDayOfWeek(){
          Calendar cal = Calendar.getInstance();
          cal.setTime(getBeginDayOfWeek());
          cal.add(Calendar.DAY_OF_WEEK, 6);
          Date weekEndSta = cal.getTime();
          return getDayEndTime(weekEndSta);
      }
  
      /**
       * 获取本月的开始时间
       *
       * @return
       */
      public static Date getBeginDayOfMonth() {
          Calendar calendar = Calendar.getInstance();
          calendar.set(getNowYear(), getNowMonth() - 1, 1);
          return getDayStartTime(calendar.getTime());
      }
  
      /**
       * 获取本月的结束时间
       *
       * @return
       */
      public static Date getEndDayOfMonth() {
          Calendar calendar = Calendar.getInstance();
          calendar.set(getNowYear(), getNowMonth() - 1, 1);
          int day = calendar.getActualMaximum(5);
          calendar.set(getNowYear(), getNowMonth() - 1, day);
          return getDayEndTime(calendar.getTime());
      }
  
      /**
       * 获取上个月的开始时间
       *
       * @return
       */
      public static Date getBeginDayOfLastMonth() {
          Calendar calendar = Calendar.getInstance();
          calendar.set(getNowYear(), getNowMonth() - 2, 1);
          return getDayStartTime(calendar.getTime());
      }
  
      /**
       * 获取上个月的结束时间
       *
       * @return
       */
      public static Date getEndDayOfLastMonth() {
          Calendar calendar = Calendar.getInstance();
          calendar.set(getNowYear(), getNowMonth() - 2, 1);
          int day = calendar.getActualMaximum(5);
          calendar.set(getNowYear(), getNowMonth() - 2, day);
          return getDayEndTime(calendar.getTime());
      }
  
      /**
       * 获取本年的开始时间
       *
       * @return
       */
      public static Date getBeginDayOfYear(Integer year) {
          Calendar cal = Calendar.getInstance();
          cal.set(Calendar.YEAR, year);
          // cal.set
          cal.set(Calendar.MONTH, Calendar.JANUARY);
          cal.set(Calendar.DATE, 1);
  
          return getDayStartTime(cal.getTime());
      }
  
      /**
       * 获取本年的结束时间
       *
       * @return
       */
      public static Date getEndDayOfYear(Integer year) {
          Calendar cal = Calendar.getInstance();
          cal.set(Calendar.YEAR, year);
          cal.set(Calendar.MONTH, Calendar.DECEMBER);
          cal.set(Calendar.DATE, 31);
          return getDayEndTime(cal.getTime());
      }
  
      /**
       * 获取某个日期的开始时间
       *
       * @param d
       * @return
       */
      public static Timestamp getDayStartTime(Date d) {
          Calendar calendar = Calendar.getInstance();
          if(null != d){
              calendar.setTime(d);
          }
          calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
          calendar.set(Calendar.MILLISECOND, 0);
          return new Timestamp(calendar.getTimeInMillis());
      }
  
      /**
       * 获取某个日期的结束时间
       *
       * @param d
       * @return
       */
      public static Timestamp getDayEndTime(Date d) {
          Calendar calendar = Calendar.getInstance();
          if(null != d) {
              calendar.setTime(d);
          }
          calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
          calendar.set(Calendar.MILLISECOND, 999);
          return new Timestamp(calendar.getTimeInMillis());
      }
  
      /**
       * 获取今年是哪一年
       *
       * @return
       */
      public static Integer getNowYear() {
          Date date = new Date();
          GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
          gc.setTime(date);
          return Integer.valueOf(gc.get(1));
      }
  
      /**
       * 获取本月是哪一月
       *
       * @return
       */
      public static int getNowMonth() {
          Date date = new Date();
          GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
          gc.setTime(date);
          return gc.get(2) + 1;
      }
  }
  