![[工具类]_Java中计算任意两个日期之间的工作天数.doc_第1页](http://file.renrendoc.com/FileRoot1/2020-2/8/678bdeca-534e-434b-9035-844f2a65b87e/678bdeca-534e-434b-9035-844f2a65b87e1.gif)
![[工具类]_Java中计算任意两个日期之间的工作天数.doc_第2页](http://file.renrendoc.com/FileRoot1/2020-2/8/678bdeca-534e-434b-9035-844f2a65b87e/678bdeca-534e-434b-9035-844f2a65b87e2.gif)
![[工具类]_Java中计算任意两个日期之间的工作天数.doc_第3页](http://file.renrendoc.com/FileRoot1/2020-2/8/678bdeca-534e-434b-9035-844f2a65b87e/678bdeca-534e-434b-9035-844f2a65b87e3.gif)
![[工具类]_Java中计算任意两个日期之间的工作天数.doc_第4页](http://file.renrendoc.com/FileRoot1/2020-2/8/678bdeca-534e-434b-9035-844f2a65b87e/678bdeca-534e-434b-9035-844f2a65b87e4.gif)
全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
苏州家居网:对于任意2个日期比如:date_start=2006-10-1、date_end=2006-10-14 ,首先计算这连个日期之间的时间间隔(天数),然后分别对date_start 和date_end 取得它们下一个星期一的日期,这样就可以得到一个新的可以整除7的完整日期间隔(这个新的日期间隔已经把星期几的问题剔出掉了),换一种说法就是我们可以得到,这两个新的日期之间的周数,拿这个周数乘以5就是工作日期了(tmpWorkingDays)。但是这个日期并不是我们所要的日期,接下来我们要做的就是计算date_start,date_end这两个日期对于根据它们所产生的新的日期之间的时间偏移量,date_start的偏移量(date_start_change)是需要加的,而date_end的这个偏移量(date_end_change)是需要减去的。 最后我们只要用tmpWorkingDays+date_start_change-date_end_change就是我们所要求的实际工作日了。以下是所有实现代码(两个日期跨年也没有问题)。 package com.date.utlit;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;/* * 计算任意2个日期内的工作日(没有考虑到国定假日) * author user * */public class DateCal /* * param args */ public static void main(String args) try String strDateStart = 2006-10-1; String strDateEnd = 2006-10-14; SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd); Date date_start = sdf.parse(strDateStart); Date date_end = sdf.parse(strDateEnd); DateCal app = new DateCal(); Calendar cal_start = Calendar.getInstance(); Calendar cal_end = Calendar.getInstance(); cal_start.setTime(date_start); cal_end.setTime(date_end); System.out.println(星期- + app.getChineseWeek(cal_start) + 日期- + cal_start.get(Calendar.YEAR) + - + (cal_start.get(Calendar.MONTH) + 1) + - + cal_start.get(Calendar.DAY_OF_MONTH); System.out.println(星期- + app.getChineseWeek(cal_end) + 日期- + cal_end.get(Calendar.YEAR) + - + (cal_end.get(Calendar.MONTH) + 1) + - + cal_end.get(Calendar.DAY_OF_MONTH); System.out.println(工作日为- + app.getWorkingDay(cal_start, cal_end); System.out.println(休息日-+app.getHolidays(cal_start, cal_end); catch (Exception e) / TODO: handle exception public int getDaysBetween(java.util.Calendar d1, java.util.Calendar d2) if (d1.after(d2) / swap dates so that d1 is start and d2 is end java.util.Calendar swap = d1; d1 = d2; d2 = swap; int days = d2.get(java.util.Calendar.DAY_OF_YEAR) - d1.get(java.util.Calendar.DAY_OF_YEAR); int y2 = d2.get(java.util.Calendar.YEAR); if (d1.get(java.util.Calendar.YEAR) != y2) d1 = (java.util.Calendar) d1.clone(); do days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR); d1.add(java.util.Calendar.YEAR, 1); while (d1.get(java.util.Calendar.YEAR) != y2); return days; /* * 计算2个日期之间的相隔天数 * param d1 * param d2 * return */ public int getWorkingDay(java.util.Calendar d1, java.util.Calendar d2) int result = -1; if (d1.after(d2) / swap dates so that d1 is start and d2 is end java.util.Calendar swap = d1; d1 = d2; d2 = swap; int betweendays = getDaysBetween(d1, d2); int charge_date = 0; int charge_start_date = 0;/开始日期的日期偏移量 int charge_end_date = 0;/结束日期的日期偏移量 / 日期不在同一个日期内 int stmp; int etmp; stmp = 7 - d1.get(Calendar.DAY_OF_WEEK); etmp = 7 - d2.get(Calendar.DAY_OF_WEEK); if (stmp != 0 & stmp != 6) / 开始日期为星期六和星期日时偏移量为0 charge_start_date = stmp - 1; if (etmp != 0 & etmp != 6) / 结束日期为星期六和星期日时偏移量为0 charge_end_date = etmp - 1; / result = (getDaysBetween(this.getNextMonday(d1), this.getNextMonday(d2) / 7) * 5 + charge_start_date - charge_end_date; /System.out.println(charge_start_date + charge_start_date); /System.out.println(charge_end_date + charge_end_date); /System.out.println(between day is- + betweendays); return result; public String getChineseWeek(Calendar date) final String dayNames = 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六 ; int dayOfWeek = date.get(Calendar.DAY_OF_WEEK); / System.out.println(dayNamesdayOfWeek - 1); return dayNamesdayOfWeek - 1; /* * 获得日期的下一个星期一的日期 * * param date * return */ public Calendar getNextMonday(Calendar date) Calendar result = null; result = date; do result = (Calendar) result.clone(); result.add(Calendar.DATE, 1); while (result.get(Cal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同书协议书的写作结构
- 卡通形象版权委托协议书
- 县域品牌运营合作协议书
- 劳务纠纷最终协议书范本
- p2p平台清退协议合同
- 健身培训费用合同协议书
- 2025土地征收协议书
- 农用车电池购买合同范本
- 2025郑州拆迁协议书
- 公费师范生的协议书范本
- 工期目标、工期保证体系及保证措施
- 集成电路测试指南
- 《亚低温冬眠治疗》课件
- 2025年淫羊藿提取物项目可行性研究报告
- 2025年山西中阳钢铁有限公司招聘笔试参考题库含答案解析
- 2025年四川攀枝花钒钛高新国有资本投资运营有限公司招聘笔试参考题库附带答案详解
- DB11T 2330-2024 行业协会商会诚信建设规范
- (新版)电信网上大学智能云服务交付工程师认证考试题库-上(单选题)
- 深圳市建设工程消防施工质量控制及验收工作指引(2023年版)
- 物理-湖北省2024年秋季鄂东南联盟学校高一年级期中联考试题和答案
- 井下支护工技能鉴定考试题及答案
评论
0/150
提交评论