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; 
    } 

}

后记

实际运用可以调整传入参数的类型,和返回值的类型,方便开发。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值