2010-04-17 21 views
12

UTC datetime dilini İsveççe biçimine çevirirseniz, yaz saati eklenir (CEST). Ancak, zaman dilimi olarak isveç ile bir datetime oluştururken, CEST yerine CET alır. Bu neden?Python datetime pytz zaman dilimini kullanırken DST'yi içermiyor

>>> # Modified for readability 
>>> import pytz 
>>> import datetime 
>>> sweden = pytz.timezone('Europe/Stockholm') 
>>> 
>>> datetime.datetime(2010, 4, 20, 16, 20, tzinfo=pytz.utc).astimezone(sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CEST+2:00:00 DST>) 
>>> 
>>> datetime.datetime(2010, 4, 20, 18, 20, tzinfo=sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CET+1:00:00 STD>) 
>>> 

cevap

11

sweden nesne varsayılan olarak CET saat dilimini belirtir ama CEST başladığında tanımak ve durdurmak için yeterli bilgi içerir.

İlk örnekte, bir datetime nesnesi oluşturup yerel saate dönüştürüyorsunuz. sweden nesnesi, geçirdiğiniz UTC saatinin yaz saati uygulaması sırasında gerçekleştiğini ve uygun şekilde dönüştürülebileceğini bilir.

İkinci örnekte, datetime yapıcı her zaman girişinizi gün ışığından yararlanma saati olarak algılar ve uygun bir nesne döndürür.

datetime, girişinizi duvar saati olarak kabul edip sizin için uygun gün ışığından yararlanma ayarını seçtiyse, saatlerin ayarlandığı yıl boyunca bir belirsizlik olur. Bir duvar saati üzerinde aynı saat iki kez oluşur. Bu nedenle, datetime, datetime nesnesini oluştururken hangi saat dilimini kullandığınızı belirtmenizi zorlar.

+0

Bilgi için teşekkürler! Ayrıca, bir pytz.timezone nesnesinin localize işlevi, datetime yerine yerelleştirilmiş veri süresini oluşturmak için kullanılabilir (..., tzinfo = ) – Jesper

+4

@Jesper: [pytz docs] (http://pytz.sf.net) DST ile saat dilimi için tzinfo parametresi ile datetime constructor yerine .localize() kullanmayı açıkça belirtin. – jfs

0

Saat dilimi kısaltmaları benzersiz değildir. Örneğin, "IST", "İrlanda Standart Saati", "İran Standart Saati", "Hint Standart Saati" veya "Isreali Standart Saati" anlamına gelebilir. Bunu ayrıştırmaya güvenmemelisiniz ve bunun yerine zoneinfo saat dilimlerini kullanmalısınız.

İlgili konular