求两个日期之间间隔的天数,Python实现

代码如下

 1 def leap_year(y):   #判断是否是闰年
 2     if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
 3         return True
 4     else:
 5         return False
 6
 7 def days_in_month(y, m):    #判断每个月都有几天
 8     if m in [1, 3, 5, 7, 8, 10, 12]:
 9         return 31
10     elif m in [4, 6, 9, 11]:
11         return 30
12     else:
13         if leap_year(y):
14             return 29
15         else:
16             return 28
17
18 def days_this_year(year):   #判断今年共几天
19     if leap_year(year):
20         return 366
21     else:
22         return 365
23
24 def days_passed(year, month, day):  #判断今年过了几天
25     m = 1
26     days = 0
27     while m < month:
28         days += days_in_month(year, m)
29         m += 1
30     return days + day
31
32 def daysBetweenDates(year1, month1, day1, year2, month2, day2):
33     ##
34     # Your code here.
35     ##
36     if year1 == year2:
37         return days_passed(year2, month2, day2) - days_passed(year1, month1, day1)
38     else:
39         sum1 = 0
40         y1 = year1
41         while y1 < year2:
42             sum1 += days_this_year(y1)
43             y1 += 1
44         return sum1-days_passed(year1,month1,day1)+days_passed(year2,month2,day2)

用下面的代码进行正确性测试

def test():
    test_cases = [((2012,1,1,2012,2,28), 58),
                  ((2012,1,1,2012,3,1), 60),
                  ((2011,6,30,2012,6,30), 366),
                  ((2011,1,1,2012,8,8), 585 ),
                  ((1900,1,1,1999,12,31), 36523)]
    for (args, answer) in test_cases:
        result = daysBetweenDates(*args)
        if result != answer:
            print "Test with data:", args, "failed"
        else:
            print "Test case passed!"

test()

测试结果如下

求两个日期之间间隔的天数,Python实现

时间: 2024-08-05 23:28:44

求两个日期之间间隔的天数,Python实现的相关文章

Android-计算两个日期之间间隔的天数

要计算两个日期之间间隔的天数,必须把两个日期转换成统一的时间戳,然后计算其毫秒差,再将毫秒差转换成天数. System.out.print("开始时间:"); String str1 = beginTime; // "yyyyMMdd"格式 如 20131022 System.out.println("\n结束时间:"); String str2 = _endTime; // "yyyyMMdd"格式 如 20131022 S

js 求两个日期之间相差天数

//求两个日期之间的相差天数 function daysBetween(DateOne, DateTwo) { var OneMonth = DateOne.substring(5, DateOne.lastIndexOf('/')); var OneDay = DateOne.substring(DateOne.length, DateOne.lastIndexOf('/') + 1); var OneYear = DateOne.substring(0, DateOne.indexOf('/

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

【翻译自mos文章】计算Oracle数据库中两个日期之间的工作日天数

计算两个日期之间的工作日天数(不包括这两个日期,不包括weekend) 参考自: How to Compute Business Days for a Date Range in SQL or PLSQL (Doc ID 1014162.6) 有两个方法: 第一个是 使用sql语句: SQL> SELECT ((TO_NUMBER(TRUNC(to_date('2015-04-22','yyyy-mm-dd'), 'D') - TRUNC(to_date('2015-04-21','yyyy-m

计算两个日期之间的工作日天数

最近遇到要求两个日期之间的工作日天数的问题,遂在网上找了下js的代码,参考了下别人的代码,发现写的都有些冗余,于是自己思考,进行了一下简单处理.主要是在循环处理上进行了精简. 对剩余天数的循环,也就可以考虑是对开始日期到剩余天数之间的处理,循环开始日期到剩余天数之间有多少个周六周日(最多只有一个周六或者一个周日),由于当前开始日期在(0-6)之间,也就是当前开始日期的星期对应的数字加上剩余天数(0-6)的循环一定在(0-11)之间,所以0,7代表周日,6代表周六. <html> <hea

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

如下: typedef struct date { int year; int month; int day; }; 提示: 1. 使用如下函数完成相应功能 int isleapyear(int y); //计算是否为闰年 int islegal(Date x); //计算日期是否合法 int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值 2. 用于一维数组表示一年每月含有的天数 int dayofmonth[12] = {31,28,31,30,3

计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较

/** * 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较 * @param higDate 减数 * @param lowDate 被减数 * @returns 差值天数 格式不正确返回null * @dada 2016-09-19 lhh添加备注 */ function DateDiff(higDate, lowDate) { //sDate1和sDate2是2006-12-18格式 var aDate, oDate1, oDate2, iDays; aDate =

通用方法总结(获得两个日期之间的工作天数(周一到周五),加密解密,一个方法执行花费的时间(代码优化时可以使用))

日期计算: 1 /// <summary> 2 /// 获得两个日期之间的工作天数(周一到周五) 3 /// </summary> 4 /// <param name="startTime">起始日期</param> 5 /// <param name="endTime">结束日期</param> 6 /// <returns>返回工作天数</returns> 7 pub

(013)每日SQL学习:确定两个日期之间的工作日天数和计算一年周内各日期次数

1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from dual union all select to_date('2018-01-15','yyyy-mm-dd') as 日期 from dual ), x1 as --日期并列显示 (select min (日期) 开始日期,max(日期) 结束日期 from x0 ), x2 as --日期之间的天数