- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
日期时间计算,日期计算,时间计算器,日期时间计算器,日期计算器,时间计算,时间计算器在线计算,职称计算机考试时间,计算时间的方法,受孕时间计算器
案例 日期、时间运算
一、给定日期由年、月、日(三个整数,年的取值在1970-2050之间)组成,完成以下功能:
(1)判断给定日期的合法性;
(2)计算两个日期相差的天数;
(3)计算一个日期加上一个整数后对应的日期;
(4)计算一个日期减去一个整数后对应的日期;
(5)计算一个日期是星期几。
针对这个问题,很自然想到本例分解为5个模块,如图14.1所示。
图14.1 日期计算功能分解图
二、仔细分析每一个模块的功能的具体流程:
1. 判断给定日期的合法性:
首先判断给定年份是否位于1970到2050之间。然后判断给定月份是否在1到12之间。最后判定日的合法性。判定日的合法性与月份有关,还涉及到闰年问题。当月份为1、3、5、7、8、10、12时,日的有效范围为1到31;当月份为4、6、9、11时,日的有效范围为1到30;当月份为2时,若年为闰年,日的有效范围为1到29;当月份为2时,若年不为闰年,日的有效范围为1到28。
图14.2 日期合法性判定盒图
判断日期合法性要要用到判断年份是否为闰年,在图14.2中并未给出实现方法,在图14.3中给出。
图14.3 闰年判定盒图
2. 计算两个日期相差的天数
计算日期A(yearA、monthA、dayA)和日期B(yearB、monthB、dayB)相差天数,假定A小于B并且A和B不在同一年份,很自然想到把天数分成3段:
2.1 A日期到A所在年份12月31日的天数;
2.2 A之后到B之前的整年的天数(A、B相邻年份这部分没有);
2.3 B日期所在年份1月1日到B日期的天数。
图14.4 日期差分段计算图
若A小于B并且A和B在同一年份,直接在年内计算。
2.1和2.3都是计算年内的一段时间,并且涉及到闰年问题。2.2计算整年比较容易,但是也要涉及到闰年问题。这里先不讨论具体流程,分析完下面几个模块后再讨论。
3. 计算一个日期加上一个整数天数后对应的日期
计算日期A(yearA、monthA、dayA)加上一个整数天数days对应的日期,
若days小于A日期到A所在年份12月31日的天数
则
对应结果日期在本年中计算,yearA不变。
否则
yearA加days。
若天数剩下的的部分够整年(闰年问题),则循环
yearA加days;
days去掉一年天数;
对days剩下的不够一年的天数,在该年计算对应日期。
图14.5 日期加整数分段计算图
4. 计算一个日期减去一个整数天数后对应的日期
计算日期A(yearA、monthA、dayA)减去一个整数天数days对应的日期,
若days小于A所在年份1月1日到A日期的天数
则
对应结果日期在本年中计算,yearA不变。
否则
yearA减1。
若days剩下的的部分够整年(闰年问题),则循环
yearA减1;
days去掉一年天数;
对days剩下的不够一年的天数,在该年计算对应日期。
图14.6 日期减整数分段计算图
5. 计算一个日期是星期几
计算日期A(yearA、monthA、dayA)为星期几,需要找到一个参照的日期B,只需要知道日期B为星期几,然后计算出A和B相差的天数,就很容易计算出A为星期几。此处又需要用到计算两个日期的差。
通过上述分析,发现到处都在计算一段日期天数,这种一段日期天数分为3种:年内1月1日到某日期的天数(年内的前半段);年内某日期到12月31日的天数(年内的后半段);整年的天数。只有整年天数容易计算,其他两种较为复杂,能不能回避呢?
对于日期A和B的差,可以选定日期C(1970年1月1日),计算C到A的天数CA,再计算C到B的天数CB,则CB减CA为A到B的天数。而对C到A,只需要计算整年(因为C为1月1日)加上A的年内前半段,C到B同理。这样就回避掉了计算年内后半段的问题。把从选定日期C(1970年1月1日)到某日期A的天数用函数dateToDays(A)来描述,有了该函数,则问题2和5都很容易解决了。对于问题3和4,可以把日期A通过dateToDays函数转化为天数,再加减一个整数,变成一个新的天数,只需要再定义一个函数daysToDate(days)把天数转换为从1970年1月1日经过该天数对应的日期即可。daysToDate函数也只需要处理若干整年(因为从1970年1月1日起)和结果年份内的前半段。
总结一下,本例共抽象出3个公用的函数:
leap:判断闰年函数。
dateToDays:把一个日期转换成从1970年1月1日到该日期的天数。
daysToDate:把天数转换成从1970年1月1日经过该天数所到的日期。
有了这几个函数,解决本例中的问题可以这样做:
模块2. 计算日期A(yearA、monthA、dayA)和日期B(yearB、monthB
您可能关注的文档
最近下载
- 《机械装调技术》电子教案 模块五 整机调试与运行任务一 齿轮啮合齿侧间隙的检测与调整.doc VIP
- 青花瓷 完美演奏版 周杰伦 钢琴谱 数字 简谱.pdf VIP
- 第38届物理竞赛决赛实验考试答题纸 .pdf VIP
- 现代医药物流交易的配送中心建设项目可行性研究报告.doc VIP
- 2025-2026学年初中生物学人教版2024八年级上册-人教版2024教学设计合集.docx
- 养生馆卫生管理制度(3篇).docx
- 健康管理师课件第一章--健康管理概论.ppt VIP
- JBT 4333.4-2013 厢式压滤机和板框压滤机 第4部分:隔膜滤板.pdf VIP
- 电信反诈骗演讲稿模板5篇.docx VIP
- 基于光纤布拉格光栅的温度测量系统设计与应用.docx VIP
文档评论(0)