获取随机某天所在的周一和周末和月初日期

 

 

背景:  有个需求,如标题所示,代码如下:

 

/**
     * 处理表和分区
     * @param tableName 表名
     * @param day 分区  2017-04-01
     */
    private static String dealWithDay(String tableName, String day) {
        String returnDay = "";
        if(tableName.endsWith("_month")) {
            // 获取当天所在的月初
            String[] ss = day.split("-");
            System.out.println(day);
            System.out.println(ss.length);
            returnDay = ss[0] + "-" + ss[1] + "-01";
        }else if(tableName.endsWith("_week")) {
            // 获取当天所在的周一
            try{
                 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式  
                 Calendar cal = Calendar.getInstance();  
                 Date time=sdf.parse("2019-01-13");
                 cal.setTime(time);  
                 //System.out.println("要计算日期为:"+sdf.format(cal.getTime())); //输出要计算日期  

                 //判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了  
                 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天  
                 if(1 == dayWeek) {  
                    cal.add(Calendar.DAY_OF_MONTH, -1);  
                 }  

                cal.setFirstDayOfWeek(Calendar.MONDAY);//设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一  

                int days = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天  
                cal.add(Calendar.DATE, cal.getFirstDayOfWeek()-days);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值   
                //System.out.println("所在周星期一的日期:"+sdf.format(cal.getTime()));
                returnDay = sdf.format(cal.getTime());
                /*System.out.println(cal.getFirstDayOfWeek()+"-"+day+"+6="+(cal.getFirstDayOfWeek()-day+6));

                cal.add(Calendar.DATE, 6);
                System.out.println("所在周星期日的日期:"+sdf.format(cal.getTime())); */ 
                }catch(Exception e) {
                    e.printStackTrace();
                }
        }else{
            returnDay = day;
        }
        return returnDay;
        
    }

 

 

测试代码:

 

    try{
         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式  
         Calendar cal = Calendar.getInstance();  
         Date time=sdf.parse("2019-01-13");
         cal.setTime(time);  
         System.out.println("要计算日期为:"+sdf.format(cal.getTime())); //输出要计算日期  

         //判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了  
       int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天  
         if(1 == dayWeek) { // 如果是周日,向前推一天,如果没有这一段,那么下面计算的周一和周日将是下一周的周一和周日
            cal.add(Calendar.DAY_OF_MONTH, -1);  
         }  
        
        cal.setFirstDayOfWeek(Calendar.MONDAY);//设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一  
        
        int day = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天  
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek()-day);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值   
        System.out.println("所在周星期一的日期:"+sdf.format(cal.getTime()));
        System.out.println(cal.getFirstDayOfWeek()+"-"+day+"+6="+(cal.getFirstDayOfWeek()-day+6));

        cal.add(Calendar.DATE, 6);
        System.out.println("所在周星期日的日期:"+sdf.format(cal.getTime()));  
        }catch(Exception e) {
            e.printStackTrace();
        }

 

posted on 2019-01-10 11:00  ligongda2006  阅读(398)  评论(0编辑  收藏  举报