从 Python 中的日期减去 n 天
Subtracting n days from date in Python
我想从文件的时间戳中减去 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
.
清理导入
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
当你对一个字符串使用time.strftime()
you are actually converting 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'
要获得与 time.gmtime()
to can instead use datetime.datetime.utcfromtimestamp()
类似的行为,这将提供一个日期时间对象,您可以从中减去时间增量。
然后如果你想要的最终结果实际上是一个字符串,你可以使用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
我想从文件的时间戳中减去 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
.
清理导入
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
当你对一个字符串使用time.strftime()
you are actually converting 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'
要获得与 time.gmtime()
to can instead use datetime.datetime.utcfromtimestamp()
类似的行为,这将提供一个日期时间对象,您可以从中减去时间增量。
然后如果你想要的最终结果实际上是一个字符串,你可以使用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