2015-06-17 16 views
5

Ben UTC saat yönteme geçirilen got tarihini dönüştürme iki kod satırlarını içeren bir python komut dosyası yazıyorum:Python saat dilimi yanlış mı?

print "Timezone: %s" % get_localzone() 
date = datetime.now(tz=get_localzone()) 
print "Local time: %s" % date 
utc = pytz.utc 
utc_date = date.astimezone(utc) 
print "UTC date: %s" % utc_date 

ve sonucudur: As you can

Timezone: America/Chicago 
Local time: 2015-06-17 14:58:45.224827-05:00 
UTC date: 2015-06-17 19:58:45.224827+00:00 

": 00 -05", yanlış bir şey, ama aynı saat diliminde olan özelleştirilmiş bir datetime nesnesi oluştururken: yerel saatte ofset bakınız olan

date = datetime(2015, 6, 17, 14, 58, 45, tzinfo=get_localzone()) 

sonuç haline s ": 00 -05" için "-05: 51"

Timezone: America/Chicago 
Local time: 2015-06-17 14:58:45-05:51 

değiştirildi ofset. Aynı zamanda ilk "datetime.now()" nin üretildiğini ve saat diliminin değişmediğini de kullandım, birisi bana bunun neden olduğunu açıklıyor mu? Teşekkürler! Bunun yerine tzinfo parametresi atanması

cevap

8

, pytz gelen localize yöntemi kullanın.

tz = get_localzone() 
date = tz.localize(datetime(2015, 6, 17, 14, 58, 45)) 

Bu

ilk "Not" kutu ile başlayan, the pytz documentation belirgin tartışılan ve ilk kod örneğinde olduğu.

Ayrıca,yönteminin nereden geldiğini (varsayalım) the tzlocal documentation da gösterilmektedir.

Bilginize, ofset -05:51-05:50:36 ve geri 1883 as shown here kullanım şekilde olduğu varsayılır America/Chicago saat diliminde, orijinal LMT değerinden geliyor. Python'da -05:51 LMT değerini vererek en yakın dakikaya yuvarlanır. Bu ofseti görüyorsunuz çünkü yerelleştirme yöntemi çağrılmadı, bu yüzden pytz sadece o saat diliminin girişiyle bilinen ilk ofseti kullanıyor.

+0

Detaylı yanıt için teşekkürler, benim sorunumu çözdü :) –

+1

@YueQiLi: not: 'tz.localize (datetime.now())' yerine 'datetime.now (tz)' kullanmalısınız. İkincisi, yerel zaman belirsiz ise (örneğin, bir DST geçişi sırasında) başarısız olabilir. Eğer giriş zamanı şimdi değilse o zaman, 'is_dst' parametresini' tz.localize() 'a, dizginlemek için geçebilirsiniz. – jfs

+0

J.F.Sebastian teşekkür @, ben sadece [pytz dokümantasyon] (http://pythonhosted.org/pytz/) üzerinde bir göz attım ve haklısın, benim koduna bu ekleyecektir. Diğer benzer sorulara rağmen, her iki problemin datetime kurucusunun kötüye kullanılmasından kaynaklanmış olmasına rağmen, benim gibi yeni başlayanlar için onları aynı türden bir soruna ayırmak benim için hala zor. [Soruları silinmez yinelenen] (http://meta.stackexchange.com/questions/5221/how-does-deleting-work: Başkalarının çaylak hata bu tür :) –

İlgili konular