2010-07-23 29 views
5

Vì vậy, tôi có đối tượng datetime trong thời gian UTC và tôi muốn chuyển đổi chúng thành dấu thời gian UTC. Vấn đề là, time.mktime thực hiện các điều chỉnh cho giờ địa phương.Làm cách nào để tạo dấu thời gian unix không điều chỉnh cho giờ địa phương?

Vì vậy, đây là một số mã:

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()) 

Dưới đây là một số kết quả:

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 

Vì vậy, rõ ràng là nếu hệ thống đang trong thời gian tính theo giờ UTC không có vấn đề, nhưng khi nó không phải, đó là một vấn đề . Thiết lập biến môi trường và gọi time.tzset hoạt động nhưng có an toàn không? Tôi không muốn điều chỉnh nó cho toàn bộ hệ thống.

Có cách nào khác để thực hiện việc này không? Hoặc là an toàn để gọi time.tzset theo cách này.

Trả lời

6

Mô-đun calendar chứa calendar.timegm giải quyết vấn đề này.

calendar.timegm (tuple)

Một chức năng không liên quan nhưng tiện dụng mà phải mất một tuple thời gian như được trả về bởi các gmtime() chức năng trong module time, và trả về giá trị timestamp Unix tương ứng, giả sử một thời đại của năm 1970, và Mã hóa POSIX. Thực tế, time.gmtime()timegm() là sự đảo ngược của nhau.

Các vấn đề liên quan