全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
苏州家居网:对于任意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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年法定传染病报告管理试题(含答案)
- 2026年传染病报告时限培训考核试题(含答案)
- 2025下半年幼儿教资考试《保教知识与能力》真题及答案
- 2026事业单位工勤技能-新疆-新疆无损探伤工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-广西-广西热力运行工二级(技师)历年参考题库含答案详解
- 国有企业集体合同范本(范本)
- 2026事业单位工勤技能-广东-广东林木种苗工一级(高级技师)历年参考题库含答案详解
- 工程施工合同(桥面、护栏)(范本)
- 2026事业单位工勤技能-宁夏-宁夏汽车修理工(技师-高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-天津-天津政务服务办事员一级(高级技师)历年参考题库含答案详解
- T/CEC 193-2018 电力行业无人机巡检作业人员培训考核规范
- 麻醉科术中过敏反应处理教程
- 2025国企竞聘上岗与干部竞聘上岗笔试题及答案
- 生物医药研发项目计划书范例
- 医疗器械经营质量管理规范现场检查原则培训试题及答案
- 智能交通系统在公共交通线路优化中的应用可行性研究报告
- 第十届“雄鹰杯”小动物医师技能大赛备考试题库(附答案)
- 医院食品安全培训
- 2025年第九届“学宪法、讲宪法”知识竞赛测试题库(含答案)
- (正式版)DB14∕T 3563-2025 《 县域医共体慢病管理中心建设与运行规范》
- 混凝土理论知识考核试题题库与答案
评论
0/150
提交评论