计算机数日期,计算机如何计算两个日期之间的天数

计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数。

举个例子:

2017年2月1日-2017年6月1日中间有多少天?那么计算机应该如何计算?如果是你的话你应该怎么去算呢?

一般人:

按照月份加 :28+31+30+31+1

笨一点的人:找一本日历,一天一天的数,虽然慢一点,但只要会数数肯定也可以数出来

第一种算法对人类来说确实是简单的,但是有前提,你知道每个月有几天,今年是否是闰年,这个计算包含两部分,整月数,非整月数,人类几乎口算就可以;但是如果计算机实现起来,其实会复杂的多,因为计算机只会做一些简单重复的劳动,而且速度非常快。

下图是我用python实现的一个简单版本,基本实现了此项需求

import math

def isLeapYear(year):

'''judge a year is leapyear'''

if math.fmod(year, 4) == 0 and math.fmod(year, 100) != 0:

return True

if math.fmod(year, 400) == 0:

return True

return False

def daysInMonth(month, isLeapYear):

assert month >= 1 and month <= 12

monthDays = (31,28,31,30,31,30,31,31,30,31,30,31)

day = monthDays[month-1]

if isLeapYear and month == 2:

day += 1

return day

def nextDay(year, month, day):

isleap = isLeapYear(year)

monthDay = daysInMonth(month, isleap)

if day < monthDay:

return year, month, day + 1

else:

if month == 12:

return year + 1, 1, 1

else:

return year, month + 1, 1

def daysBetweenDates(year1, month1, day1, year2, month2, day2):

days = 0

nextday = (year1, month1, day1)

while True:

nextday = nextDay(nextday[0], nextday[1], nextday[2])

days += 1

if nextday == (year2, month2, day2):

return days

return None

核心算法是daysBetweenDates()和nextDay(), daysBetweenDates()的思想是,从第一个日期开始数,一直数到第二个日期返回; nextDay()实现了数日期的正确性,内部屏蔽了闰年和月份对天数的影响。

什么是闰年这个很多人一直忽略的问题,以及它的算法为什么是这个样子,这里贴一个链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a jquery 标签点击不跳转_form标签的action属性怎么用?form标签action属性的用法介绍(附实例)...

本篇文章主要的介绍了关于HTML中form标签action属性的用法介绍和实例&#xff0c;还有关于form标签的action属性的定义和语法介绍&#xff0c;最后徐还有关于form标签的action属性的作用解释。现在让我们一起来看吧。我们先来介绍HTML中form标签的action属性的含义&#xff1a;…

计算机屏幕亮度调到多少合适,电脑屏幕的亮度和对比度调到多少比较合适,对眼睛伤害最小?有哪位高手了解?...

选购液晶电视的八大关注事项&#xff1a;1、留意显示尺寸是否齐全&#xff1a;现在液晶电视的主流尺寸基本上都是27英寸、32英寸和37英寸&#xff0c;这些已经能够满足客厅以及卧室的观看需求&#xff0c;但这里要提醒一下&#xff0c;最好是购买产品线比较丰富的品牌&#xff…

后发送过慢的问题_点胶阀使用常见问题怎么解决

点胶阀是在点胶作业中必不可少的配件之一&#xff0c;在点胶过程中点胶阀遇到问题该怎么解决呢&#xff0c;今天阿莱思斯给大家进行分析。1.点胶阀无法停胶问题&#xff1a;a.点胶阀中转杆或密封装置磨损。b.点胶阀的供给气压无法打开2.点胶阀针头滴胶&#xff0c;主要是以下几…

dns备用服务器信息,dns服务器地址(dns首选和备用填多少)

dns服务器地址DNS是计算机域名体系(DomainNameSystem或DomainNameService)的缩写&#xff0c;它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址&#xff0c;并具有将域名转换为IP地址功用的服务器。其中域名有必要对应一个IP地址&am…

接口传值后不起作用_前端工程师吐后端工程师(第八讲)——接口的开发

上一讲我们介绍了如何写让模板变量在页面上展示&#xff0c;本讲我们介绍一下后端开发工作中最常用的功能——接口。创建一个go_test4文件夹&#xff0c;然后把go_test3中的代码复制进去。然后打开main.go文件&#xff0c;进行更改。说到接口就必不可少的涉及到传值和接口返回&…

css选择器按功能分,CSS 选择器

概览在 CSS 中&#xff0c;选择器用于选择需要添加样式的元素。CSS 选择器非常丰富&#xff0c;现将 CSS 1 - 3 目前所有的选择器列举如下。选择器例子例子描述CSS版本.class.intro选择 class"intro" 的所有元素。1#id#firstname选择 id"firstname" 的元素…

tensor数据类型转换_PyTorch的tensor数据类型及其相关转换

1 基本类型PyTorch的数据类型为各式各样的tensor&#xff0c;tensor可以理解为高维矩阵&#xff0c;与Numpy中的array类似。PyTorch中的tensor包括CPU上的数据类型和GPU上的数据类型。Torch定义了七种CPU tensor类型和八种GPU tensor类型。通过使用type函数可以查看变量类型&am…

cli3解决 ie11语法错误 vue_【VUE3.0】它来了,2020年09月18日,Vue.js 3.0 正式发布,但是........

您曾见过凌晨的苹果发布会&#xff0c;那前端界的发布会你见过吗&#xff1f;在Vue3正式发布前&#xff0c;Vue的作者尤雨溪发表主题演讲。注意&#xff01;注意&#xff01;注意&#xff01;发布会中表示不建议大家立刻升级到Vue3.0版本&#xff0c;之前项目中某些依赖项可能还…

贪婪洞窟2服务器维护,《贪婪洞窟2》11月30日更新维护多久 贪婪洞窟2更新维护公告...

原标题&#xff1a;《贪婪洞窟2》11月30日更新维护多久 贪婪洞窟2更新维护公告斗玩网(d.chinaz.com)报道&#xff1a;《贪婪洞窟2》 11 月 30 日更新维护多久?一起来看看贪婪洞窟2 11月30日更新维护公告。贪婪洞窟2在11月30日早上时间对游戏全服进行的停机维护导致许多玩家在早…

centos修改磁盘uuid_为什么MySQL用uuid做主键会被骂?

“ 在 MySQL 中设计表的时候&#xff0c;MySQL 官方推荐不要使用 uuid 或者不连续不重复的雪花 id(long 形且唯一&#xff0c;单机递增)&#xff0c;而是推荐连续自增的主键 id&#xff0c;官方的推荐是 auto_increment。那么为什么不建议采用 uuid&#xff0c;使用 uuid 究竟有…

从客户端登陆服务器的配置文件,BLE模式和配置文件

BLE模式和配置文件(原文)本文档探讨了BLE如何工作&#xff0c;特别是如何将两种BLE模式(连接和广告)用于不同的目的。外围设备和中央设备vs服务器和客户端当我们通过BLE连接设备时&#xff0c;我们将它们视为外设(从设备)设备或中央(主设备)设备。 蓝牙标准建立了该区分方式以匹…

和preload_通过LD_PRELOAD绕过disable_functions

0x00 前言前段时间碰到拿到shell以后限制了basedir并且无法执行命令的情况&#xff0c;解决办法是上传恶意的.so文件&#xff0c;并通过设置LD_PRELOAD&#xff0c;然后调用新进程来加载恶意.so文件&#xff0c;达到绕过的效果。当时做这道题目的时候是跟着别人的题解直接套的(…

ajax循环输出,Ajax轮询 select循环输出

弹出层.del{color:red}.addname{color:#337ab7}款项名目操作{$vo.name}删除添加...$(".addname").on("click",function(){layer.prompt({title: 添加款项名目, formType: 0}, function(text, index){layer.close(index);$.post("{:U(Contracts/setmon…

群晖服务器性能测试,对群晖DS716+进行性能测试_群晖 DS716+_企业存储技术与评测-中关村在线...

Iometer是一个工作在单系统和集群系统上用来衡量和描述I/O子系统的工具。可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I/O的负载&#xff0c;或者用来产生整个综合的I/O负载。它也可以用来产生并测量单系统或者多系统(网络)的负载。在性能测试环节&#xff0c;我们采…

传播路由_什么路由器穿墙效果好?购买防骗知识

买无线路由器&#xff0c;首要辨识什么路由器穿墙效果好。面对市面上五花八门的路由器&#xff0c;很多小白在看到纷繁的参数就凌乱了&#xff0c;上了无良商家的当。小编觉得授人以鱼不如授人以渔&#xff0c;所以给大家写了一篇辨别什么路由器穿墙效果好的防入坑购买指南。我…

小程序消息服务器webapi,小程序订阅消息

# 小程序订阅消息# 功能介绍消息能力是小程序能力中的重要组成&#xff0c;我们为开发者提供了订阅消息能力&#xff0c;以便实现服务的闭环和更优的体验。 订阅消息推送位置&#xff1a;服务通知订阅消息下发条件&#xff1a;用户自主订阅订阅消息卡片跳转能力&#xff1a;点击…

php生成pdf中文断码_Rmarkdown导出中文PDF解决方案

Rmarkdown非常适合R语言使用者导出格式漂亮的文档&#xff0c;但是输出中文PDF的过程中会遇到各种麻烦的问题&#xff0c;本文整理了我的经验供大家参考。总的来说&#xff0c;通过Rmarkdown输出中文版pdf报告&#xff0c;要解决以下两个核心问题&#xff1a;导出PDF需要配置Te…

分数的大小比较优秀教案_人教版小学数学五年级下册异分母分数加、减法公开课优质课课件教案视频...

教学案例-《异分母分数加减法》教学目标&#xff1a;1.借助直观图形&#xff0c;在操作、观察、比较、的活动中理解异分母分数加减法的算理&#xff0c;掌握计算方法&#xff0c;并能正确进行计算。2.渗透转化、迁移的数学思想&#xff0c;积累研究分数问题的数学活动经验。3.能…

docker给容器分配固定ip

1.为 Docker 容器设置一个固定的 IP 地址 要为 Docker 容器设置一个固定的 IP 地址&#xff0c;有几种常见的方法&#xff1a; 使用自定义网络和静态 IP 地址&#xff1a; 你可以创建一个自定义的 Docker 网络&#xff0c;并在这个网络上为容器分配静态 IP 地址。首先&#x…

分号可以用来分段么_更高效的GMX分段模拟方法:修改tpr文件

■2020-11-01 22:42:18在以前的一篇文章中, 我简单说过基于GROMACS的分段模拟方法[1]. 这种方法非常通用, 几乎能完成任意的功能, 且无须修改源代码, 但是运行效率比较差, 因为每次运行mdrun都要重新生成tpr文件. 对大分子来说, 使用grompp生成tpr还是很耗时的, 可能会成为运行…