2010-07-23 2 views
5

그래서 UTC 시간에 datetime 개체가 있고 UTC 타임 스탬프로 변환하려고합니다. 문제는 time.mktime이 localtime을 조정한다는 것입니다. 여기 현지 시간으로 조정되지 않는 유닉스 타임 스탬프는 어떻게 만듭니 까?

import os 
import pytz 
import time 
import datetime 

epoch = pytz.utc.localize(datetime.datetime(1970, 1, 1)) 
print time.mktime(epoch.timetuple()) 

os.environ['TZ'] = 'UTC+0' 
time.tzset() 
print time.mktime(epoch.timetuple()) 

일부 출력 : 그래서 여기

몇 가지 코드 시스템이 UTC 시간에 아무 문제가없는 경우 그러니 확실히

Python 2.6.4 (r264:75706, Dec 25 2009, 08:52:16) 
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> import pytz 
>>> import time 
>>> import datetime 
>>> 
>>> epoch = pytz.utc.localize(datetime.datetime(1970, 1, 1)) 
>>> print time.mktime(epoch.timetuple()) 
25200.0 
>>> 
>>> os.environ['TZ'] = 'UTC+0' 
>>> time.tzset() 
>>> print time.mktime(epoch.timetuple()) 
0.0 

하지만, 그렇지 않은 경우는 문제가 . 환경 변수를 설정하고 time.tzset을 호출하면 작동하지만 안전합니까? 전체 시스템에 맞게 조정하고 싶지는 않습니다.

다른 방법이 있습니까? 또는 time.tzset을이 방법으로 호출하는 것이 안전할까요?

답변

6

calendar 모듈에는이 문제를 해결하는 calendar.timegm이 포함되어 있습니다.

calendar.timegm (튜플)

1970 에포크 가정 등 time 모듈에 gmtime() 함수에 의해 리턴 된 타임 튜플을 취하고, 대응 유닉스 타임 스탬프 값을 리턴하는 무관하지만 편리한 기능 및 POSIX 인코딩. 사실, time.gmtime()timegm()은 서로 반대입니다.

관련 문제