欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获取当前时间的月初/月末,当前周的周一/周日

程序员文章站 2022-05-15 10:58:49
...

获取当前时间周的开始,结束时间

即:若当前时间为2021-06-29(周二)这周的开始应为2021-06-28(周一) 结束为2021-07-04(周日)
方法一:

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     Calendar cal = Calendar.getInstance();
     //设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
     cal.setFirstDayOfWeek(Calendar.MONDAY);
     //获得当前日期是一个星期的第几天
     int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
     if (dayWeek == 1) {
        dayWeek = 8;
     }

     // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
     cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);
     cal.set(Calendar.SECOND, 0);
     cal.set(Calendar.MINUTE, 0);
     cal.set(Calendar.HOUR_OF_DAY, 0);
     cal.set(Calendar.MILLISECOND, 0);
     Date mondayDate = cal.getTime();
     String weekBegin = sdf.format(mondayDate);
     System.out.println("所在周星期一的日期:" + weekBegin);



     cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek());
     Date sundayDate = cal.getTime();
     String weekEnd = sdf.format(sundayDate);
     System.out.println("所在周星期日的日期:" + weekEnd);

结果:

       所在周星期一的日期:2021-06-28 00:00:00
       所在周星期日的日期:2021-07-04 00:00:00

方法二:

     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     Calendar cld = Calendar.getInstance(Locale.CHINA);
     cld.setFirstDayOfWeek(Calendar.MONDAY);//以周一为首日
     cld.setTimeInMillis(System.currentTimeMillis());//当前时间
     cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//周一
     System.out.println(df.format(cld.getTime()));

     cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//周日
     System.out.println(df.format(cld.getTime()));

结果:

         周一:2021-06-28 15:52:38
         周日:2021-07-04 15:52:38

方法三:

// 获得本周一与当前日期相差的天数
    public static  int getMondayPlus() {
        Calendar cd = Calendar.getInstance();
        int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
        //由于Calendar提供的都是以星期日作为周一的开始时间
        if (dayOfWeek == 1) {
            return -6;
        } else {
            return 2 - dayOfWeek;
        }
    }
    // 获得当前周- 周一的日期
    public static  Long getCurrentMonday() {
        int mondayPlus = getMondayPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus);
        Date monday = currentDate.getTime();
        return monday.getTime();
    }
    
  // 获得当前周- 周日  的日期
    public static Long  getPreviousSunday() {
        int mondayPlus = getMondayPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus +6);
        Date monday = currentDate.getTime();
        return monday.getTime();
      

结果:

     周一:2021-06-28 15:52:38
     周日:2021-07-04 15:52:38

获取当月的月初,月底

即:若现在日期为2021-06-28 15:52:38,
则它的月初这个月的1号为:2021-06-01 00:00:00,
月末为这个月的28/30/31号为:2021-06-30 23:59:59

月初:

    Calendar c = Calendar.getInstance();
    c.add(Calendar.MONTH, 0);
    c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
    //设置为1号,当前日期既为本月第一天
     /*     c.set(Calendar.DAY_OF_MONTH, 1);*/
    //将小时至0
    c.set(Calendar.HOUR_OF_DAY, 0);
    //将分钟至0
    c.set(Calendar.MINUTE, 0);
    //将秒至0
    c.set(Calendar.SECOND, 0);
    //将毫秒至0
    c.set(Calendar.MILLISECOND, 0);
    String first = sdf.format(c.getTime());
    System.out.println("当月初为:" + first);

结果:

    当月初为:2021-06-01 00:00:00

月末:

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Calendar ca = Calendar.getInstance();
    ca.set(Calendar.DAY_OF_MONTH,
            ca.getActualMaximum(Calendar.DAY_OF_MONTH));
    //将小时至23
    ca.set(Calendar.HOUR_OF_DAY, 23);
    //将分钟至59
    ca.set(Calendar.MINUTE, 59);
    //将秒至59
    ca.set(Calendar.SECOND, 59);
    //将毫秒至999
    ca.set(Calendar.MILLISECOND, 999);
    String last = df.format(ca.getTime());
    System.out.println("当月月底为:"+last);

结果:

   当月初为:2021-06-30 23:59:59
相关标签: java