Zaman dilimleri arasında geçiş yapmak için zaman çizelgesini kullanın. İhtiyacınız olan tek şey saat dilimleri arasındaki saat cinsinden sapmadır. Bir datetime nesnesinin 6 öğesinin tümü için sınırlarla uğraşmak zorunda kalmazsınız. timedelta artık yılları, artık yüzyılları vb. kolaylıkla halleder. Önce sen
from datetime import datetime, timedelta
O offset
zaman saat dilimindeki delta ise:
timeout = timein + timedelta(hours = offset)
burada timein ve timeout datetime nesneleridir. Örneğin
timein + timedelta(hours = -8)
GMT'den PST'ye dönüştürür.
Peki, nasıl belirlenir offset
? Burada, diğer bazı cevapların güzel yaptığı saat dilimi "farkında" olan datetime nesnelerini kullanmadan dönüşüm için sadece birkaç olanakınız olması koşuluyla basit bir işlevdir. Biraz manuel, ancak bazen netlik en iyisidir.
def change_timezone(timein, timezone, timezone_out):
'''
changes timezone between predefined timezone offsets to GMT
timein - datetime object
timezone - 'PST', 'PDT', 'GMT' (can add more as needed)
timezone_out - 'PST', 'PDT', 'GMT' (can add more as needed)
'''
# simple table lookup
tz_offset = {'PST': {'GMT': 8, 'PDT': 1, 'PST': 0}, \
'GMT': {'PST': -8, 'PDT': -7, 'GMT': 0}, \
'PDT': {'GMT': 7, 'PST': -1, 'PDT': 0}}
try:
offset = tz_offset[timezone][timezone_out]
except:
msg = 'Input timezone=' + timezone + ' OR output time zone=' + \
timezone_out + ' not recognized'
raise DateTimeError(msg)
return timein + timedelta(hours = offset)
Sayısız yanıtı inceledikten ve aklıma gelen en sıkı kodla oynadıktan sonra (şimdilik), zamanın önemli olduğu ve karışık zaman dilimlerinin hesaba katılması gereken tüm uygulamaların tüm datetime nesnelerini yapmak için gerçek bir çaba göstermesi en iyisi gibi görünüyor. "farkında". O zaman en basit cevap şudur:
timeout = timein.astimezone(pytz.timezone("GMT"))
örneğin GMT'ye dönüştürmek. Tabii ki, yerel veya başka bir şekilde istediğiniz herhangi bir saat dilimine / dilinden dönüştürmek için sadece pytz'ın anladığı uygun saat dilimi dizesini kullanın (pytz.all_timezones'ten). Gün ışığından yararlanma saati de dikkate alınır.