计算两个字符串日期之间的日期数并返回一个整数

时间:2011-07-04 11:45:49

标签: python file datetime

我有一个像这样的.txt文件数据集,其中包含感兴趣的日期列:

1181206,3560076,2,01/03/2010,46,45,M,F
2754630,2831844,1,03/03/2010,56,50,M,F
3701022,3536017,1,04/03/2010,40,38,M,F
3786132,3776706,2,22/03/2010,54,48,M,F
1430789,3723506,1,04/05/2010,55,43,F,M
2824581,3091019,2,23/06/2010,59,58,M,F
4797641,4766769,1,04/08/2010,53,49,M,F

我想知道每个日期和01/03/2010之间的天数,并将日期替换为偏移{0,2,3,21 ...}的日期,产生如下输出:

1181206,3560076,2,0,46,45,M,F
2754630,2831844,1,2,56,50,M,F
3701022,3536017,1,3,40,38,M,F
3786132,3776706,2,21,54,48,M,F
1430789,3723506,1,64,55,43,F,M
2824581,3091019,2,114,59,58,M,F
4797641,4766769,1,156,53,49,M,F

我已经尝试了很长时间并且变得非常令人沮丧。我尝试使用datetime.datetime.strptime('01 / 03/2010',“%d /%m /%Y”)。date()方法转换为datetime,然后减去两个日期,但它给了我一个输出例如'3天,0:00:00'但我似乎无法得到只有数字的输出!

3 个答案:

答案 0 :(得分:4)

两个日期之间的差异是timedelta。任何timedelta实例都有days属性,它是您想要的整数值。

答案 1 :(得分:1)

使用你的输入(有点冗长......)

#!/usr/bin/env python

import datetime

with open('input') as fd:
    d_first = datetime.date(2010, 03, 01)
    for line in fd:
        date=line.split(',')[3]
        day, month, year= date.split(r'/')
        d = datetime.date(int(year), int(month), int(day))
        diff=d - d_first
        print diff.days

给出

0
2
3
21
64
114
156

使用python查看pleac,很多日期示例。

答案 2 :(得分:1)

这很简单。使用您提供的代码:

date1 = datetime.datetime.strptime('01/03/2010', '%d/%m/%Y').date()
date2 = datetime.datetime.strptime('04/03/2010', '%d/%m/%Y').date()

你得到两个日期时间对象。

(date2-date1)

会给你时间增量。你犯的错误是将timedelta转换为字符串。 timedelta objects有一个日期属性。因此,您可以获得使用它的天数:

(date2-date1).days

这会生成所需的输出。