`
dyyaries
  • 浏览: 80699 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用Calendar获取一段时间内的工作日

    博客分类:
  • Java
阅读更多
/**
  * 生成工作日开始(周一)-结束(周五)日期对的方法
  * 例如:
  * 输入:参数start_time ="2011-05-04"(星期三),end_time="2011-07-14"(星期四)
  * 返回:[
  *    ["2011-05-04","2011-05-06"],
  *    ["2011-05-09","2011-05-13"],
  *     ...,
  *    ["2011-07-4","2011-07-14"]
  *     ]
  * 说明:返回的List中的第一个元素数组中,第1个值是开始日期,第2个值是开始日期后一个星期5
  *     List中的最后一个元素数组中,第1个值是结束日期前一个星期1,第2个值是结束日期
  *     List中间部分每一个元素数组中,第1个值是星期1,第2个值是星期5
  * @param start_time
  * @param end_time
  * @return
  */

public List<String[]> getTimePairList(String start_time,String end_time){
  List<String[]> list = new ArrayList<String[]>();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Date start_date = null;
  Date end_date = null;
  
  try {
   start_date = sdf.parse(start_time);
   end_date = sdf.parse(end_time);
   int dayOfWeek1 = caculateWeekDays(start_date); //1->周日,2->周一
   int dayOfWeek2 = caculateWeekDays(end_date);
   int pre_days = 8 - dayOfWeek1; //i...saturday
   int last_days = dayOfWeek2; //sunday...i
   long diff_days = caculateDays(start_date,end_date);
   int remain_weeks = (int)(diff_days+2-pre_days-(last_days+1))/7;
   //计算第一个start、end对
   addPair(list,start_date,null,pre_days-2);
   
   //TODO添加
   for(int i=0; i<remain_weeks; i++){
    Date start_d = caculateDate(start_date, pre_days+i*7+1);
    addPair(list,start_d,null,4);
   }
   
   //计算最后一个start、end对
   addPair(list,null,end_date,-(last_days-2));
  } catch (ParseException e) {
   e.printStackTrace();
  }
  
  return list;
 }
 
 private void addPair(List<String[]> list, Date start_date, Date end_date, int days) {
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Calendar c = Calendar.getInstance();
  
  String[] start_end_pair = new String[2];
  if(start_date!=null && end_date==null){
   c.setTime(start_date);
   c.add(Calendar.DAY_OF_MONTH, days);
   Date d = c.getTime();
   start_end_pair[0] = sdf.format(start_date);
   start_end_pair[1] = sdf.format(d);
  }else if(start_date==null && end_date!=null){
   c.setTime(end_date);
   c.add(Calendar.DAY_OF_MONTH, days);
   Date d = c.getTime();
   start_end_pair[0] = sdf.format(d);
   start_end_pair[1] = sdf.format(end_date);
  }
  list.add(start_end_pair);
 }
 
 public Date caculateDate(Date start_date, int days){
  Calendar c = Calendar.getInstance();
  c.setTime(start_date);
  c.add(Calendar.DAY_OF_MONTH, days);
  return c.getTime();
 }
 
 public int caculateWeekDays(Date date){
  Calendar c = Calendar.getInstance();
  c.setTime(date);
  return c.get(Calendar.DAY_OF_WEEK);
 }
 
 private int caculateDays(Date start_date, Date end_date){
  return Math.round(end_date.getTime()/(1000*60*60*24)-start_date.getTime()/(1000*60*60*24));
 }

 

 

 

 

 

  • 大小: 22 KB
  • 大小: 55.4 KB
分享到:
评论

相关推荐

    Full Calendar based JQuery

    4. **时间区段**:支持自定义时间区段,例如工作日、休息日或特定时间段的特殊颜色标记。 5. **异步数据加载**:通过Ajax或JSON数据源,可以从服务器动态获取和更新日历事件,实现数据的实时同步。 6. **多语言...

    calendar日历控件_v0.1_API1

    例如,可以利用`setWorkDay`方法设置员工的出勤状态,或者通过`goYear`和`goMonth`方法快速切换查看不同时间段的日历。同时,配置对象允许开发者自定义节假日显示,使日历更加贴近实际需求。总之,`calendar日历控件...

    wx_calendar-master.rar_limited7go_wx 联级日历_wx_calendar_wx_calenda

    其联级日历功能意味着用户可以一次性选择多个日期,比如选择一段连续的时间区间,或者选择多个不连续的日期,大大提高了用户操作的效率。 这个组件的核心功能包括: 1. **自定义样式**:wx_calendar支持开发者...

    java代码-判断时间是否工作时间

    这里,我们利用`DayOfWeek`枚举来获取一周中的哪一天。如果是周六或周日,我们直接返回`false`,表示非工作日。其他日子则按照之前的工作时间规则进行判断。 此外,还可以添加对假期的支持,例如从数据库查询或配置...

    beehive.calendar.js v0.1 javascript实现的google日历.zip

    《beehive.calendar.js v0.1:JavaScript实现的Google日历详解》 在现代Web开发中,交互式和...通过理解和掌握其工作原理和使用方法,开发者可以轻松地在项目中集成这一强大的日历功能,提升用户的在线日程管理体验。

    Java时间函数大全[参考].pdf

    Java时间函数在软件开发中扮演着重要角色...例如,你可以使用它们来计算两个日期之间的差值,或者根据特定规则调整日期,如工作日计算、假期判断等。通过这些函数,开发者可以轻松地处理复杂的时间逻辑,简化编程任务。

    swing时间选择控件

    这段代码创建了一个只允许选择日期的JSpinner,格式为"年-月-日"。 3. **自定义JDialog**: 如果默认的组件不能满足需求,开发者可以选择创建一个自定义的JDialog来实现复杂的时间选择功能。这通常涉及使用多个...

    google-calendar-daylight-extension:修改 Google 日历以可视化您所在时区的白天时间的 Chrome 扩展程序

    3. **减少误解**:对于国际合作的团队,确保所有参与者都在清醒的工作时间内进行沟通,可以有效减少因时差带来的误解。 4. **个性化体验**:除了默认的白天时间显示,扩展可能还提供了自定义颜色、样式等功能,让...

    万年历时间系统_详细介绍万年历的设计流程及所用技术

    `Date`类用于存储和操作日期,而`Calendar`类则提供了更灵活的日期操作,如获取或设置年、月、日、小时等字段。 在实现过程中,可能还需要用到Java的线程机制。线程使得程序能够同时执行多个任务,例如,在显示当前...

    fullcalendar支持农历 年历

    1. **多视图展示**:FullCalendar支持多种日历视图,如日视图、周视图、月视图、工作日视图等,用户可以根据需求自由切换,查看不同时间段的日程。 2. **事件管理**:你可以轻松添加、编辑和删除日历事件,这些事件...

    jquery 周日历安排(周、日、月)

    每个工作日都分成了若干时间块,用户可以轻松添加、编辑或删除事件。 2. **日视图**:除了周视图外,插件还提供了日视图,让用户能够细化到每个小时的计划,这对于管理繁忙的日程特别有用。 3. **月视图**:在月...

    ACCP 5.0S1 JAVA指导学习1答案

    Java的`Calendar.DAY_OF_WEEK`常量可以用于获取一周中的哪一天。 3. **用户输入处理**:用户需要输入年份、月份和日期,因此你需要学习如何使用`Scanner`类从控制台读取用户输入,并进行适当的验证以确保输入的合法...

    fullcalendar-3.4.0

    1. **多视图支持**:FullCalendar提供多种视图模式,包括日视图、周视图、月视图以及工作日视图,让用户能够根据需求查看不同时间段的日程。3.4.0版本可能对这些视图进行了优化,以适应不同场景下的显示效果。 2. *...

    react-calendar

    在这个项目中,“react-calendar”是一个基于React的日历组件,可以用于创建自定义的日历视图,如月份视图、周视图或日视图,为用户提供直观的日程管理功能。 **Django后端集成** Django是用Python编写的一个强大...

    超强日历控件 样式和内容很好看

    【超强日历控件】是一种在网页开发中广泛使用的交互元素,它的主要功能是为用户提供一个直观、便捷的方式来选择日期或时间段。这类控件通常由JavaScript编写,可以在不刷新整个页面的情况下更新日期选择,提高了用户...

    DayPilotPro控件 7.1.2739

    1. **多视图支持**:DayPilotPro支持日、周、月、年等多种视图,用户可以根据需要切换查看不同时间段的计划。 2. **事件管理**:可以创建、编辑和删除事件,并支持拖放操作,使得调整日程变得简单直观。 3. **资源...

    fullcalendar-1.4.6

    4. **时间区段**:对于每个时间段,FullCalendar都可以清晰地展示,便于用户查看和安排时间。 5. **自定义样式**:开发者可以通过CSS样式表对日历的外观进行个性化定制,使其与网站设计风格保持一致。 6. **多语言...

Global site tag (gtag.js) - Google Analytics