タイムゾーンで異なるタイムゾーンを適切に表すにはどうすればよいですか?次の例は、EDTが1時間進んでいることがわかっているため、myTimeZone()の減算をアンコメントできるためにのみ機能します。
import datetime, re
from datetime import tzinfo
class myTimeZone(tzinfo):
"""docstring for myTimeZone"""
def utfoffset(self, dt):
return timedelta(hours=1)
def myDateHandler(aDateString):
"""u'Sat, 6 Sep 2008 21:16:33 EDT'"""
_my_date_pattern = re.compile(r'\w+\,\s+(\d+)\s+(\w+)\s+(\d+)\s+(\d+)\:(\d+)\:(\d+)')
day, month, year, hour, minute, second = _my_date_pattern.search(aDateString).groups()
month = [
'JAN', 'FEB', 'MAR',
'APR', 'MAY', 'JUN',
'JUL', 'AUG', 'SEP',
'OCT', 'NOV', 'DEC'
].index(month.upper()) + 1
dt = datetime.datetime(
int(year), int(month), int(day),
int(hour), int(minute), int(second)
)
# dt = dt - datetime.timedelta(hours=1)
# dt = dt - dt.tzinfo.utfoffset(myTimeZone())
return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, 0, 0, 0)
def main():
print myDateHandler("Sat, 6 Sep 2008 21:16:33 EDT")
if __== '__main__':
main()
Python標準ライブラリにはタイムゾーン情報が含まれていません。残念なことに、タイムゾーンデータはPythonよりもはるかに高速に変更されます。これにはサードパーティモジュールが必要です。通常の選択肢は pytz
現在のローカルタイムゾーンでは、次を使用できます。
_>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9
_
返される値は、UTCの西の秒単位です(UTCの東の領域は負の値を取得します)。これは、私たちが実際にそれを好む方法の反対であり、したがって_* -1
_です。
localtime().tm_isdst
は、夏時間が現在有効でない場合はゼロになります(ただし、地域で夏時間の法律が最近変更された場合、これは正しくない場合があります)。