ファイルのタイムスタンプから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
filedate
の印刷は機能するので、ファイルから日付が正しく読み取られます。機能していないように見えるのは減算ビットです。
望ましい出力:filedate
が2013年6月11日の場合、print end_date
は06/01/2013
。
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
_
クリーンアップされたインポート
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