ユーザーの DB に UTC オフセットがあります。
+5:30
Pythonを使用して、このUTCオフセットからタイムゾーンの略語を取得するにはどうすればよいですか?
そのような
+5:30 => IST
Pythonを使用してこれを行うことは可能ですか?
これは不可能です。
同じオフセットを共有する多くのタイム ゾーンがあります。 詳細については、このウィキペディアの記事を参照してください。
タイム ゾーンの略語には、統一された標準はありません。こことここにいくつかリストされており、両方向に重複があることがわかります。
例えば:
StackOverflowのタイムゾーン タグ wikiのセクション「Time Zone != Offset」もお読みください。
現在、指定されたUTC オフセットに対応するタイムゾーンの略語 ( tz データベースで指定されている) のセット ( 0 個以上) を取得できます。
#!/usr/bin/env python
from datetime import datetime, timedelta
import pytz # $ pip install pytz
utc_offset = timedelta(hours=5, minutes=30) # +5:30
now = datetime.now(pytz.utc) # current time
print({now.astimezone(tz).tzname()
for tz in map(pytz.timezone, pytz.all_timezones_set)
if now.astimezone(tz).utcoffset() == utc_offset})
set(['IST'])
履歴データを含む略語を取得する場合:
#!/usr/bin/env python
from datetime import datetime, timedelta
import pytz # $ pip install pytz
utc_offset = timedelta(hours=5, minutes=30) # +5:30
abbr = set()
now = datetime.now(pytz.utc)
for tz in map(pytz.timezone, pytz.all_timezones_set):
dt = now.astimezone(tz)
tzinfos = getattr(tz, '_tzinfos',
[(dt.utcoffset(), dt.dst(), dt.tzname())])
abbr.update(tzname for off, _, tzname in tzinfos if off == utc_offset)
print(abbr)
set(['IST'])