在Python中从日期减去n天

时间:2015-09-01 14:30:58

标签: python python-2.7 datetime timedelta

我想从文件的时间戳中减去n天,但它似乎不起作用。我看过this post,我觉得我很接近。

这是我的代码的摘录:

import os, time
from datetime import datetime, timedelta

def processData1( pageFile ):
    f = open(pageFile, "r")
    page = f.read()
    filedate = time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime(pageFile)))
    print filedate
    end_date = filedate - datetime.timedelta(days=10)
    print end_date

打印filedate有效,因此可以从文件中正确读取日期。这是减法位似乎没有用。

期望的输出: 如果filedate是06/11/2013,则print end_date应该产生06/01/2013

2 个答案:

答案 0 :(得分:10)

清理了导入

from datetime import datetime, timedelta
start = '06/11/2013'
start = datetime.strptime(start, "%m/%d/%Y") #string to date
end = start - timedelta(days=10) # date - days
print start,end 

答案 1 :(得分:8)

当您使用time.strftime()时,实际上是将struct_time转换为字符串。

所以filedate实际上是一个字符串。当您尝试+- datetime.timedelta时,您会收到错误消息。示例 -

In [5]: s = time.strftime('%m/%d/%Y', time.gmtime(time.time()))

In [6]: s
Out[6]: '09/01/2015'

In [8]: s - datetime.timedelta(days=10)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-fb1d19ed0b02> in <module>()
----> 1 s - datetime.timedelta(days=10)

TypeError: unsupported operand type(s) for -: 'str' and 'datetime.timedelta'

要获得与time.gmtime()相似的行为,可以改为使用datetime.datetime.utcfromtimestamp(),这会提供一个日期时间对象,您可以从中减去timedelta。

然后,如果您想要的最终结果实际上是一个字符串,您可以使用datetime.strftime()将其转换为所需格式的字符串。示例 -

import os
from datetime import datetime, timedelta

def processData1( pageFile ):
    f = open(pageFile, "r")
    page = f.read()
    filedate = datetime.utcfromtimestamp(os.path.getmtime(pageFile)))
    print filedate
    end_date = filedate - timedelta(days=10)
    print end_date   #end_date would be a datetime object.
    end_date_string = end_date.strftime('%m/%d/%Y')
    print end_date_string