获取一周的星期一日期和一个月的第一天星期

1.  需求说明

最近笔者在开发一个报表功能时,客户要求报表生成的时间可以自己制定,也就是说我们系统需要提供一个或两个日期的文件框(如果是日报表就一个,如果是周或月或年报表就需要两个)给客户自己填写。除此之外,客户还需求,如果是日报,那么就提供一个文本框,文本框默认为当天的时间;其它的情况就要提供两个文本框,默认的时间是从开始时间到当天时间。例如:周报需要从一周的星期一的日期到当天,月报就需要从一个月的一号到当天,但是一个月的一号或二号是周末,那应该从下一个日开始。

2.  开发思路

我们先来说一下关于周时间的处理。如果我们自己写算法处理,那么代码量可能会比较大,花的时间也会比较多。所以笔者借助java的Calendar类来处理。Calendar.DAY_OF_WEEK就获取当前日期是一周的第几天,Calendar.setFirstDayOfWeek(Calendar.MONDAY),设置一周的第一天为星期一,按照国外的习惯是星期日。所以,我们就可以顺利写出代码了。

3.  代码实现

3.1周时间的星期一日期

public static void mondayToSunday() {  
        Date now = new Date();  
        Date time = new Date(now.getYear(), now.getMonth(), now.getDate());  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(time);  
        // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了  
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天  
        System.out.println("dayWeek:" + dayWeek);
        if (1 == dayWeek) {  
            cal.add(Calendar.DAY_OF_MONTH, -1);  
        }  
        System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期  
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一  
        cal.setFirstDayOfWeek(Calendar.MONDAY);  
        // 获得当前日期是一个星期的第几天  
        int day = cal.get(Calendar.DAY_OF_WEEK);  
        // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值  
        System.out.println(cal.getFirstDayOfWeek() + ":" + day);
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);  
        cal.set(Calendar.HOUR, 0);  
        cal.set(Calendar.MINUTE, 0);  
        cal.set(Calendar.SECOND, 0);  
        String imptimeBegin = sdf.format(cal.getTime());  
        Date mondayDate = cal.getTime();  
        System.out.println("所在周星期一的日期:" + imptimeBegin);  
         
        cal.add(Calendar.DATE, 6);  
        cal.set(Calendar.HOUR, 23);  
        cal.set(Calendar.MINUTE, 59);  
        cal.set(Calendar.SECOND, 59);  
  
        String imptimeEnd = sdf.format(cal.getTime());  
        Date sundayDate = cal.getTime();  
        System.out.println("所在周星期日的日期:" + imptimeEnd);  
          
        DateFormat datetimeDf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        System.out.println("星期一的开始:"+datetimeDf.format(mondayDate));  
        System.out.println("星期天的结束:"+datetimeDf.format(sundayDate)); 
          
    }  

3.2月时间一号星期几(部分)

String strDay = null;
		/**获取日历实例**/
		Calendar cld = Calendar.getInstance();
		/**设置日历成当月的第一天**/
		cld.set(Calendar.DAY_OF_MONTH,1);
		//星期对应数字
		int day = cld.get(Calendar.DAY_OF_WEEK);
		//转换成相应的便于理解的星期
		switch (day)
		{
		case 1 : strDay = "星期天";
		break;
		case 2 : strDay = "星期一";
		break;
		case 3 : strDay = "星期二";
		break;
		case 4 : strDay = "星期三";
		break;
		case 5 : strDay = "星期四";
		break;
		case 6 : strDay = "星期五";
		break;
		default : strDay = "星期六";
		}
		System.out.println("该月的第一天是 : "+strDay);

4.  总结

代码部分笔者也是参考了网上的资料,之所以在此处写出,希望对读者有所帮助,或者在工作中遇到这样的时间处理可以作为参考,更快找到灵感。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值