2011-03-12 15 views
6

Geçerli saati +0900'e Python'da dönüştürmek istiyorum.Python: Yerel saati başka bir zaman dilimine dönüştür

Bunu yapmanın uygun yolu nedir (zaman modülünde varsayarak)?

Bu yazının Python'da bulunmadığını okudum ve pytz gibi bir şey kullanmanız gerekiyor.

Sadece bu örnekte sunucu bazında veya global olarak değiştirmek istemiyorum.

cevap

6

Bunun yerine datetime module'u kullanabilirsiniz. http://docs.python.org/library/datetime.html#datetime.tzinfo.fromutc

from datetime import tzinfo, timedelta, datetime 

class FixedOffset(tzinfo): 
    def __init__(self, offset): 
     self.__offset = timedelta(hours=offset) 
     self.__dst = timedelta(hours=offset-1) 
     self.__name = '' 

    def utcoffset(self, dt): 
     return self.__offset 

    def tzname(self, dt): 
     return self.__name 

    def dst(self, dt): 
     return self.__dst 

print datetime.now() 
print datetime.now(FixedOffset(9)) 

uyarlanmıştır verir:

2011-03-12 00:28:32.214000 
2011-03-12 14:28:32.215000+09:00 

bunu çalıştırdığınızda

+0

Teşekkürler. Mükemmel cevap! Yerel, UTC ve kaydırılmış zamanınızı tam resmini göstermek için baskı datetime.utcnow() 'da da ekleyebilirsiniz. –

0

datetime modülünde, datetime.datetime ve datetime.time zaman dilimlerinin nasıl işleneceğini kontrol eden tzinfo adı verilen soyut bir temel sınıf vardır. Temelde saat dilimini yorumlamayı kontrol etmek için kendi sınıfınızı türetiyorsunuz. Ben şahsen hiç kullanmadım, bu konuda daha fazla şey söyleyemem.

Maalesef, yalnızca time modülünde doğrudan gördüğüm tek saat dilimi denetimi, genel olarak çalışır.

9

Ben akımı dönüştürmek istediğiniz (başka güne UTC-0500 değilim, o zaman DST başlar) ...
Python'da +0900'e kadar olan süre, sadece bu durumda sunucu bazında veya global olarak değiştirmek istemiyorum.

UTC offset +0900 Zaman dilimi için geçerli zamanı almak için:

from datetime import datetime, timedelta 

current_time_in_utc = datetime.utcnow() 
result = current_time_in_utc + timedelta(hours=9) 
ayrıca aksi takdirde nedeniyle DST geçişleri ve diğer zaman dilimine göre yanlış sonuçlar alabilirsiniz pytz kütüphane kullanmadığınız sürece farkında datetime nesneleri kullanmayın

değişir. Tarih saat nesnelerinde bazı aritmetikler yapmanız gerekiyorsa; önce onları UTC'ye dönüştür. Eğer pytz ve diğer harici modüller kullanabilirsiniz olur ne olmaz

+0

Bu benim de ihtiyacım olan şey. Teşekkürler! – Tensigh

1

, bu daha yalındır çözüm

pip install pytz tzlocal 

sonra UTC verileri dönüştürmek için

from datetime import datetime 
from pytz import timezone 
import pytz 
from tzlocal import get_localzone 

#timezones 
local = get_localzone() 
utc = pytz.utc 
cet = timezone('CET') 

#get now time in different zones 
print(datetime.now(local)) 
print(datetime.now(cet)) 
print(datetime.now(utc)) 

#convert local time now to CET 
print(datetime.now(local).astimezone(cet)) 
print(datetime.now(cet).astimezone(utc)) 
7

Örnek IST etmektir

from datetime import datetime 
from pytz import timezone 

format = "%Y-%m-%d %H:%M:%S %Z%z" 

# Current time in UTC 
now_utc = datetime.now(timezone('UTC')) 
print now_utc.strftime(format) 
Output: 2015-05-18 10:02:47 UTC+0000 

# Convert to Asia/Kolkata time zone 
now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) 
print now_asia.strftime(format) 
Output: 2015-05-18 15:32:47 IST+0530 
+0

Teşekkürler. 'Asia/Kolkata' deyin ama Asya/Japonya gibi kabul edilen zaman dilimlerinin bir listesini nasıl görebilirim? – f126ck

+0

Demek istediğim, tüm zaman dilimi dizelerini avilable yazdıran bir komut var mı? – f126ck

+0

kendim bulundu print (pytz.all_timezones) – f126ck

İlgili konular