在Python中从日期减去n天

Isa*_*sak 6 python datetime timedelta python-2.7

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

这是我的代码的摘录:

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
Run Code Online (Sandbox Code Playgroud)

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

期望的输出:如果filedate是06/11/2013,print end_date应该屈服06/01/2013.

tae*_*esu 14

清理进口

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 
Run Code Online (Sandbox Code Playgroud)


Ana*_*mar 10

当您使用time.strftime()时,实际上是将a转换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'
Run Code Online (Sandbox Code Playgroud)

要获得类似的行为而time.gmtime()可以使用datetime.datetime.utcfromtimestamp(),这将提供一个datetime对象,您可以从中减去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
Run Code Online (Sandbox Code Playgroud)