6

現在、複数のタイムゾーンをサポートする必要があるアプリケーションに取り組んでいます。

そのために、dateutil ライブラリを使用しています。ここで、dateutil ライブラリがサポートする利用可能なすべてのタイムゾーンのリストをユーザーに提示する方法が必要です。

また、「Europe/Berlin」のように tz を文字列としてデータベースに保存することをお勧めしますか?

4

2 に答える 2

11

dateutilOS のタイムゾーン情報を使用しますが、独自の圧縮されたタイムゾーン情報ファイルも保持します。

このデータをロードするユーティリティ コードから使用可能な名前を一覧表示できます。

from dateutil.zoneinfo import get_zonefile_instance
zonenames = list(get_zonefile_instance().zones)

そのリストを少しソートしてフィルタリングする必要があります。このリストには、短縮された (3 文字の) タイムゾーン コードと「地域/都市」の両方のエントリがあります。

これらの名前をデータベースに保存することは問題ありません。

これにより、すべてのデータがメモリにロードされることに注意してください。それが望ましくない場合は、tar ファイルを自分でロードする必要があります。

import os
import tarfile
import dateutil.zoneinfo

zi_path = os.path.abspath(os.path.dirname(dateutil.zoneinfo.__file__))
zonesfile = tarfile.TarFile.open(
    os.path.join(zi_path, dateutil.zoneinfo.ZONEFILENAME))
zonenames = [zn.name for zn in zonesfile.getmembers()
             if not zn.isdir() and zn.name != dateutil.zoneinfo.METADATA_FN]
于 2013-03-16T20:10:54.543 に答える