3

ユーザーの DB に UTC オフセットがあります。

+5:30 

Pythonを使用して、このUTCオフセットからタイムゾーンの略語を取得するにはどうすればよいですか?

そのような

+5:30 => IST

Pythonを使用してこれを行うことは可能ですか?

4

3 に答える 3

6

これは不可能です。

  • 同じオフセットを共有する多くのタイム ゾーンがあります。 詳細については、このウィキペディアの記事を参照してください

  • タイム ゾーンの略語には、統一された標準はありません。ここここにいくつかリストされており、両方向に重複があることがわかります。

    例えば:

    • CST は、-5:00、-6:00、+8:00、+9:30、または +10:30 の可能性があります。
    • -10:00 は、HST、HAST、TAHT、または CKT の可能性があります。

StackOverflowのタイムゾーン タグ wikiのセクション「Time Zone != Offset」もお読みください。

于 2013-10-08T17:09:53.960 に答える
1

現在、指定された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'])
于 2015-05-09T11:23:59.653 に答える