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