2013-03-16 2 views
3

현재 여러 시간대를 지원하는 데 필요한 응용 프로그램에서 작업 중입니다.사용 가능한 모든 시간대를 가져옵니다.

그 때문에 dateutil 라이브러리를 사용하고 있습니다. 이제 사용자에게 dateutil 라이브러리가 지원하는 모든 사용 가능한 시간대 목록을 제공해야합니다.

또한 "Europe/Berlin"과 같이 데이터베이스에 문자열을 저장하는 것이 좋습니다?

+1

'pytz.all_timezones'는 ['pytz'] (http://pytz.sourceforge.net/)에서 사용할 수있는 표준 시간대 목록을 제공합니다. 때로는 [dateutil] 및 [pytz]를 사용하여 시간대를 변환하면 다른 결과가 발생할 수 있습니다 (https://gist.github.com/zed/3838828). – jfs

+0

목록 대신 맵 기반 시간대 선택기를 고려할 수 있습니다. [JavaScript에 대한 설명] (https://github.com/dosx/timezone-picker). 만약 당신이 웹 어플리케이션을 작성하지 않는다면 어쩌면 비슷한 파이어 네이티브 컨트롤이있을 것이라고 확신하지만, 손이 아닌 것을 모릅니다. –

답변

5

dateutil은 OS 시간대 정보를 사용하지만 자체 압축 된 시간대 정보 파일도 가지고 있습니다.

당신은이 데이터를로드 유틸리티 코드에서 사용할 수있는 이름을 나열 수 :

from dateutil.zoneinfo import get_zonefile_instance 
zonenames = list(get_zonefile_instance().zones) 
당신은 약간의 목록이 정렬 및 필터해야 할 것

; 이 목록에는 "지역/도시"항목뿐만 아니라 축약 된 (3 자) 시간대 코드가 모두 있습니다.

데이터베이스에 이름을 저장하는 것이 좋습니다.

이렇게하면 모든 데이터가 메모리에로드됩니다. 그 바람직하지 있다면 당신은 타르 파일을 직접로드해야 것 :

from dateutil.zoneinfo import getzoneinfofile_stream, ZoneInfoFile 
ZoneInfoFile(getzoneinfofile_stream()).zones.keys() 
>>> ['Asia/Ujung_Pandang', 
    'America/Porto_Velho', 
    'America/La_Paz', 
    'America/Caracas', 
    'Europe/Malta', 
    'Etc/GMT-13', 
    'Atlantic/Bermuda', 
    ...] 

pytzdateutil 사용하는 것을 선호한다는

import pytz 
pytz.all_timezones 
>>> ['Africa/Abidjan', 
    'Africa/Accra', 
    'Africa/Addis_Ababa', 
    'Africa/Algiers', 
    'Africa/Asmara', 
    'Africa/Asmera', 
    'Africa/Bamako', 
    'Africa/Bangui', 
    'Africa/Banjul', 
    'Africa/Bissau', 
    'Africa/Blantyre', 
    'Africa/Brazzaville', 
    ...] 

주 조금 더 쉽다 :

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] 
+0

dateutil 2.6.0의 경우 TAR 파일의 파일 이름은 'dateutil-zoneinfo.tar.gz'입니다. –

+0

@ KurtPeek : thanks; 이 코드에는이 데이터를 직접로드하기 쉬운 액세스 유틸리티 코드가 포함되어있어 파일 이름을 하드 코드 할 필요가 없습니다. –

1

dateutil 들어 운영 체제가 시간대 정보를 결정합니다. pytz은 자체 존 파일을 사용합니다. 시스템 레벨에서 시간대를 관리하지 않으려는 경우 각각에 이점이 있지만 pytz은 더 일관성을 제공합니다.