2015-01-29 7 views
5

के समय क्षेत्र के मान लें मैं एक समय क्षेत्र कम datetime वस्तु है कि:असाइन एक अजगर datetime

import datetime 
import pytz 
fmt = "%Y-%m-%d %H:%M:%S %Z%z" 
dtUnaware = datetime.datetime(1979,2,20,6) 
print(dtUnaware.strftime(fmt)) 

यह पैदावार:

1979-02-20 06:00:00 

अब तक तो अच्छा। अब, मैं इस ऑब्जेक्ट को टाइमज़ोन असाइन करना चाहता हूं। ऐसा लगता है कि मैं या तो datetime.replace या pytz.localize का उपयोग कर सकता हूं।

पहले:

dtAware1 = dtUnaware.replace(tzinfo=pytz.timezone('Asia/Jerusalem')) 
print(dtAware1.strftime(fmt)) 

रिटर्न: 1979-02-20 06:00:00 LMT+0221। दूसरा:

dtAware2 = pytz.timezone('Asia/Jerusalem').localize(dtUnaware, is_dst=None) 
print(dtAware2.strftime(fmt)) 

1979-02-20 06:00:00 IST+0200 देता है।

पहली विधि में क्या गलत है? ऐसा लगता है कि गलत टाइमज़ोन असाइन किया गया है। क्या मुझसे कुछ गलत हो रही है?

उत्तर

1

पायट्ज़ प्रलेखन से: यह लाइब्रेरी tzinfo कार्यान्वयन के लिए प्रलेखित पायथन एपीआई से अलग है; आप स्थानीय wallclock बार बनाना चाहते हैं आप अजगर datetime कार्यान्वयन को संशोधित किए बिना localize() विधि इस दस्तावेज़ में दर्ज ... दुर्भाग्य से इन मुद्दों का समाधान नहीं किया जा सकता उपयोग करने की आवश्यकता (पीईपी-431 देखें)

मेरे इसका पठन यह है कि pytz टाइमज़ोन मानक टाइमज़ोन के समान बिल्कुल नहीं है। यदि आपके पास वास्तविक टाइमज़ोन था, तो पहली विधि अच्छी होनी चाहिए, लेकिन आपने नहीं किया है।

1

datetime एपीआई में कोई दोष है: जब आप इसे टाइमज़ोन असाइन करते हैं, तो टाइमज़ोन को उस तारीख और समय को जानने का मौका नहीं दिया जाता है, जिसके लिए इसे कॉन्फ़िगर किया जाना चाहिए। ऐतिहासिक डेटाबेस जो pytz उपयोग लंबे समय तक चला जाता है, अक्सर उस अवधि के लिए जब टाइमज़ोन नाम या ऑफसेट आज उपयोग में से अलग थे। किसी विशिष्ट दिनांक अवधि में समायोजित करने का मौका दिए बिना, टाइमज़ोन का विवरण गलत हो सकता है।

localize का उपयोग इस समस्या के आसपास है, क्योंकि दिनांक और समय क्षेत्र दोनों एक ही समय में फ़ंक्शन के भीतर उपलब्ध हैं।

+0

एक अच्छा स्पष्टीकरण। यह 'स्थानीयकरण() '' '__dst' पैरामीटर का उल्लेख करने लायक हो सकता है जो संदिग्ध और अस्तित्वहीन स्थानीय समय को संभालता है। गैर-मौजूदा स्थानीय समय के लिए 'स्थानीयकरण() 'के बाद भी' सामान्यीकृत करें) विधि का उपयोग किया जा सकता है। – jfs

संबंधित मुद्दे