日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/12 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机数日期,计算机如何计算两个日期之间的天数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算機是如何計算兩個日期之間的天數的,這個問題看起來好像很簡單,但是仔細一想,好像還沒那么簡單,月與月之間天數不一樣,平年和閏年也會影響天數。

舉個例子:

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()實現了數日期的正確性,內部屏蔽了閏年和月份對天數的影響。

什么是閏年這個很多人一直忽略的問題,以及它的算法為什么是這個樣子,這里貼一個鏈接。

總結

以上是生活随笔為你收集整理的计算机数日期,计算机如何计算两个日期之间的天数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。