GMT時刻をEST時刻に変換し、タイムスタンプを取得したい。次のことを試しましたが、タイムゾーンの設定方法がわかりません。
time = "Tue, 12 Jun 2012 14:03:10 GMT"
timestamp2 = time.mktime(time.strptime(time, '%a, %d %b %Y %H:%M:%S GMT'))
タイムゾーンは標準に組み込まれていませんPython-別のライブラリを使用する必要があります。 pytz は良い選択です。
>>> gmt = pytz.timezone('GMT')
>>> eastern = pytz.timezone('US/Eastern')
>>> time = "Tue, 12 Jun 2012 14:03:10 GMT"
>>> date = datetime.datetime.strptime(time, '%a, %d %b %Y %H:%M:%S GMT')
>>> date
datetime.datetime(2012, 6, 12, 14, 3, 10)
>>> dategmt = gmt.localize(date)
>>> dategmt
datetime.datetime(2012, 6, 12, 14, 3, 10, tzinfo=<StaticTzInfo 'GMT'>)
>>> dateeastern = dategmt.astimezone(eastern)
>>> dateeastern
datetime.datetime(2012, 6, 12, 10, 3, 10, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
pytz を使用する
from datetime import datetime
from pytz import timezone
fmt = "%Y-%m-%d %H:%M:%S %Z%z"
now_time = datetime.now(timezone('US/Eastern'))
print now_time.strftime(fmt)
それがローカルタイムゾーンであり、タイムゾーンルールが特定の時間で現在と同じである場合は、stdlibのみのソリューションを使用できます(一部のエッジケースを除く)。
#!/usr/bin/env python
from email.utils import parsedate_tz, mktime_tz
from datetime import datetime
timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT"))
print(datetime.fromtimestamp(timestamp))
# -> 2012-06-12 10:03:10
それ以外の場合は、正しいutcオフセットを取得するために、履歴タイムゾーンデータベースからのデータが必要です。 pytz
module アクセスを提供します tzデータベース :
#!/usr/bin/env python
from email.utils import parsedate_tz, mktime_tz
from datetime import datetime
import pytz # $ pip install pytz
timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT"))
eastern_dt = datetime.fromtimestamp(timestamp, pytz.timezone('America/New_York'))
print(eastern_dt.strftime('%a, %d %b %Y %H:%M:%S %z (%Z)'))
# -> Tue, 12 Jun 2012 10:03:10 -0400 (EDT)
注:POSIX timestamp
は世界中で同じです。つまり、タイムスタンプを検索するかどうかに関係なく、ローカルのタイムゾーンは関係ありません(タイムゾーンが「正しい」種類でない限り)。方法は次のとおりです TC時刻をタイムスタンプに変換します 。