java週數與相應時間轉換實體類

前言

最近開發遇到查詢第幾周內數據的問題,從而計算環比、同比,這就需要知道週數對應的日期,上網搜索並總結出一個實體類,方便以後開發。

具體代碼

import java.text.SimpleDateFormat;
import java.time.YearMonth;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateUtil {

     /**
     * 取得當前日期是多少周
     *
     * @param date
     * @return
     */
     public int getWeekOfYear(Date date) {
         Calendar c = new GregorianCalendar();
         c.setFirstDayOfWeek(Calendar.MONDAY);
         c.setMinimalDaysInFirstWeek(7);
         c.setTime (date);

         return c.get(Calendar.WEEK_OF_YEAR);
     }

     /**
     * 得到某一年周的總數
     *
     * @param year
     * @return
     */
     public int getMaxWeekNumOfYear(int year) {
         Calendar c = new GregorianCalendar();
         c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

         return getWeekOfYear(c.getTime());
     }

     /**
     * 得到某年某周的第一天
     *
     * @param year(yyyy)
     * @param week
     * @return
     */
     public String getFirstDayOfWeek(String year, String week) {
         Calendar c = new GregorianCalendar();
         c.set(Calendar.YEAR, Integer.valueOf(year));
         c.set (Calendar.MONTH, Calendar.JANUARY);
         c.set(Calendar.DATE, 1);

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

         return getFirstDayOfWeek(cal.getTime());
     }

     /**
     * 得到某年某周的最後一天
     *
     * @param year(yyyy)
     * @param week
     * @return
     */
     public String getLastDayOfWeek(String year, String week) {
         Calendar c = new GregorianCalendar();
         c.set(Calendar.YEAR, Integer.valueOf(year));
         c.set(Calendar.MONTH, Calendar.JANUARY);
         c.set(Calendar.DATE, 1);

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

         return getLastDayOfWeek(cal.getTime());
     }
     /**
     * 得到某年前一年某周的第一天
     *
     * @param year(yyyy)
     * @param week
     * @return
     */
     public String getLastYearFirstDayOfWeek(String year, String week) {
         Calendar c = new GregorianCalendar();
         c.set(Calendar.YEAR, Integer.valueOf(year)-1);
         c.set (Calendar.MONTH, Calendar.JANUARY);
         c.set(Calendar.DATE, 1);

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

         return getFirstDayOfWeek(cal.getTime ());
     }

     /**
     * 得到某年前一年某周的最後一天
     *
     * @param year(yyyy)
     * @param week
     * @return
     */
     public String getLastYearLastDayOfWeek(String year, String week) {
         Calendar c = new GregorianCalendar();
         c.set(Calendar.YEAR, Integer.valueOf(year)-1);
         c.set(Calendar.MONTH, Calendar.JANUARY);
         c.set(Calendar.DATE, 1);

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

         return getLastDayOfWeek(cal.getTime());
     }

     /**
     * 取得指定日期所在周的第一天
     *
     * @param date
     * @return String(yyyyMMdd)
     */
     public String getFirstDayOfWeek(Date date) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         Calendar c = new GregorianCalendar();
         c.setFirstDayOfWeek(Calendar.MONDAY);
         c.setTime(date);
         c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
         return sdf.format(c.getTime());
     }

     /**
     * 取得指定日期所在周的最後一天
     *
     * @param date
     * @return String(yyyyMMdd)
     */
     public String getLastDayOfWeek(Date date) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         Calendar c = new GregorianCalendar();
         c.setFirstDayOfWeek(Calendar.MONDAY);
         c.setTime(date);
         c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
         return sdf.format(c.getTime());
     }

     /**
     * 取得當前日期所在周的第一天
     *
     * @return
     */
     public Date getFirstDayOfWeek() {
         Calendar c = new GregorianCalendar();
         c.setFirstDayOfWeek(Calendar.MONDAY);
         c.setTime(new Date());
         c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
         return c.getTime ();
     }

     /**
     * 取得當前日期所在周的最後一天
     *
     * @return
     */
     public Date getLastDayOfWeek() {
         Calendar c = new GregorianCalendar();
         c.setFirstDayOfWeek(Calendar.MONDAY);
         c.setTime(new Date());
         c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
         return c.getTime();
     }

     /** 
     * 獲取指定月所在的最後一天 
     */
     public String getLastDayOfMonth(String year,String month) {  
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         Calendar cal = Calendar.getInstance();  
         cal.set(Calendar.YEAR,Integer.valueOf(year));  
         cal.set(Calendar.MONTH, Integer.valueOf(month)-1);  
         int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);  
         cal.set(Calendar.DAY_OF_MONTH, lastDay);  
         return sdf.format(cal.getTime());  
    }  

     /** 
     * 獲取指定月前一個月所在的最後一天 
     */
     public String getLastMonthLastDayOfMonth(String year,String month) {  
         YearMonth yearMonth = YearMonth.parse(year+"-"+month);
         String s=yearMonth.minus(1, ChronoUnit.MONTHS).toString();
         String[] arr = s.split("-");
         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
         Calendar cal = Calendar.getInstance();  
         cal.set(Calendar.YEAR,Integer.valueOf(arr[0]));  
         cal.set(Calendar.MONTH, Integer.valueOf(arr[1])-1);  
         int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);  
         cal.set(Calendar.DAY_OF_MONTH, lastDay);  
         return sdf1.format(cal.getTime());  
    }  
     /** 
      * 獲取指定日期對應去年的這天
      * @param day(yyyyMMdd)
      */
    public String getNowOfLastYear(String day) {
        return String.valueOf(Integer.parseInt(day.substring(0,4)) - 1)+day.substring(4,day.length());
    }

    /** 
    * 獲得指定日期的前一天 
    * @param day(yyyyMMdd)
    * @return 
    * @throws Exception 
    */ 
    public String getLastDayOfDay(String day){ 
        Calendar c = Calendar.getInstance(); 
        Date date=null; 
        try { 
            date = new SimpleDateFormat("yyyyMMdd").parse(day); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        c.setTime(date); 
        int day=c.get(Calendar.DATE); 
        c.set(Calendar.DATE,day-1); 

        String dayBefore=new SimpleDateFormat("yyyyMMdd").format(c.getTime()); 
        return dayBefore; 
    } 

}

後記

實際運用可以調整傳入參數的類型,和返回值的類型,方便開發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章