2016-04-25 13 views
1

I持た1つのdatetimeオブジェクト差し引く2時間モーメント

2016-04-11 19:46:46-04:00

2016-04-25 09:35:18.464966(この1つはdatetime.datetime.now()ある)

私は同じ形式にそれらを得るにはどうすればよいので、私はそれらを引くことができますか?

+1

最後に「-04:00」とは何を意味していますか? – linusg

+1

'datetime.strptime'これらが両方とも' datetime'オブジェクトを取り除く文字列の場合 –

+0

時間帯を設定する方法だと思いますか?元の辞書は次のようになります({"name": "Date"、 "value": "Mon、11 Apr 2016 19:46:46 -0400"} –

答えて

1

dateutil.parserを使用できます。

from dateutil.parser import * 
import datetime 

date1="2016-04-11 19:46:46-04:00" 
date2=datetime.datetime.now() 
updated_date1=parse(date1, ignoretz=True) #Ignoring TimeZone 
updated_date2=parse(str(date2)) 
result=updated_date2 - updated_date1 
print result 
+0

現在とその後の間にDSTトランジションがあった場合、またはローカルタイムゾーンが異なる場合)。タイムゾーン情報を無視しないでください。 'date1'をutc(' date1.replace(tzinfo = None) - date1.utcoffset() 'に変換し、' .now() 'の代わりに' .utcnow() 'を使って時差を見つけてください。 – jfs

0

最初の日付文字列にはタイムゾーンがあり、datetime.datetime.now()にはタイムゾーンがありません。

>>> datetime.datetime.strptime(''.join('2016-04-11 19:46:46-04:00'.rpartition(':')[0::2]), "%Y-%m-%d %H:%M:%S%z") 
datetime.datetime(2016, 4, 11, 19, 46, 46, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000))) 
:あなたはタイムゾーンオフセットで :を持っている場合、あなたは正規表現またはパーティションでそれを削除する必要があり、

>>> d1=datetime.datetime.strptime("2016-04-11 19:46:46-0400", "%Y-%m-%d %H:%M:%S%z") 
>>> print(d1) 
2016-04-11 19:46:46-04:00 

をまたは:

あなたはそうのような最初の文字列を解析することができます

私はPython 3でこれをしました.3.3より前のPythonはのディレクティブをサポートするspottyです。 (Pythonをビルドするために使用されたCライブラリがサポートしている場合のみサポートされています)Python 3.2以降ではネイ​​ティブサポートがあります。

タイムゾーンをdatetime.datetime.now()に追加するか、またはd1からタイムゾーンを追加する必要があります。

>>> d1.replace(tzinfo=None) 
datetime.datetime(2016, 4, 11, 19, 46, 46) 

を次にあなたが引くことができます:

>>> d1.replace(tzinfo=None)-datetime.datetime.now() 
datetime.timedelta(-14, 42738, 274649) 

を使用すると、タイムゾーンの自由な時間に同じタイムゾーンを作りたい場合は、あなたが行うことができます:ここではそれを削除する方法です

>>> d1-datetime.datetime.now().replace(tzinfo=d1.tzinfo) 
datetime.timedelta(-14, 41899, 435274) 
0

元の辞書は{{名前}: "日付"、 "値": "月曜日、2014年4月11日19:46:46 -0400"}のようになります
...
この1つは(文字列として指定)指定された時間からの経過秒を見つけるにはdatetime.datetime.now()

です:

import time 
from email.utils import parsedate_tz, mktime_tz 

d = {"name": "Date", "value": "Mon, 11 Apr 2016 19:46:46 -0400"} 
then = mktime_tz(parsedate_tz(d['value'])) 
now = time.time() 
elapsed_seconds = now - then 

datetimeオブジェクトtype(obj) == datetime.datetime)と文字列を(混同しないでくださいtype(obj) == str)。

関連する問題