2009-11-08 12 views
248

आप एक पायथन time.struct_time ऑब्जेक्ट को datetime.datetime ऑब्जेक्ट में कैसे परिवर्तित करते हैं?आप एक पायथन टाइम.स्ट्रक्चर_टाइम ऑब्जेक्ट को डेटाटाइम ऑब्जेक्ट में कैसे परिवर्तित करते हैं?

मैं एक पुस्तकालय है कि पहले एक और एक दूसरे पुस्तकालय है कि एक दूसरे के चाहता है प्रदान करता है ...

उत्तर

338

उपयोग time.mktime() समय टपल कन्वर्ट करने के लिए (स्थानीयसमय में) युग के बाद से सेकंड में, फिर डेटाटाइम ऑब्जेक्ट प्राप्त करने के लिए datetime.fromtimestamp() का उपयोग करें।

from time import mktime 
from datetime import datetime 

dt = datetime.fromtimestamp(mktime(struct)) 
+1

@ नाडिया वह क्यों है? आपका सरल लगता है और कम मॉड्यूल की आवश्यकता है। –

+28

ध्यान दें कि यह 1 9 00 से पहले विफल रहता है। आप आधुनिक लोगों को इस सीमा को कभी याद नहीं करते! – mlissner

+2

क्या यह 'tm_isdst' डेटा खो देगा? मुझे ऐसा लगता है, परिणामी डेटाटाइम ऑब्जेक्ट '.dst() 'पर' none' को वापस करने की सीमा तक निष्पक्ष रहता है, भले ही 'struct.tm_isdst'' 1' हो। – n611x007

111
इस तरह

है:

>>> structTime = time.localtime() 
>>> datetime.datetime(*structTime[:6]) 
datetime.datetime(2009, 11, 8, 20, 32, 35) 
+2

# आयात समय, डेटाटाइम – jhwist

+7

@jhwist - कुछ चीजें लोगों को अपने आप इसे समझने के लिए भरोसा किया जा सकता है :) – orip

+1

* स्ट्रक्चरटाइम के सामने * क्या करता है? – rodling

31

यह आपके सवाल का सीधा जवाब (जो बहुत अच्छी तरह से पहले से ही उत्तर दिया गया था) नहीं है। हालांकि, कई बार मुझे मौलिक सिद्धांत पर कई बार काट दिया गया था, मैं इतना तनाव नहीं डाल सकता कि यह आपके समय पर बारीकी से देखने के लिए आपको व्यवहार करेगा। संरचना_टाइम वस्तु प्रदान कर रही है, बनाम अन्य क्षेत्रों में क्या हो सकता है।

मान लें कि आपके पास एक समय है। स्ट्रक्चर_टाइम ऑब्जेक्ट, और कुछ अन्य दिनांक/समय स्ट्रिंग, दोनों की तुलना करें, और सुनिश्चित करें कि आप डेटा खो नहीं रहे हैं और अनजाने में एक निष्क्रिय डेटाटाइम ऑब्जेक्ट बना रहे हैं, जब आप अन्यथा कर सकते हैं।

उदाहरण के लिए, उत्कृष्ट feedparser मॉड्यूल एक "प्रकाशित" क्षेत्र वापस आ जाएगी और उसकी "published_parsed" क्षेत्र में एक time.struct_time वस्तु वापस आ सकते हैं:

time.struct_time(tm_year=2013, tm_mon=9, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=42, tm_wday=0, tm_yday=252, tm_isdst=0) 

अब ध्यान दें कि आप वास्तव में के साथ "प्रकाशित " खेत।

Mon, 09 Sep 2013 19:57:42 -0400 

Stallman दाढ़ी द्वारा! टाइमज़ोन जानकारी!

from dateutil import parser 
dt = parser.parse(entry["published"]) 
print "published", entry["published"]) 
print "dt", dt 
print "utcoffset", dt.utcoffset() 
print "tzinfo", dt.tzinfo 
print "dst", dt.dst() 

जो हमें देता है:

published Mon, 09 Sep 2013 19:57:42 -0400 
dt 2013-09-09 19:57:42-04:00 
utcoffset -1 day, 20:00:00 
tzinfo tzoffset(None, -14400) 
dst 0:00:00 

एक तो इस्तेमाल कर सकते हैं timezone-

इस मामले में, आलसी आदमी समयक्षेत्र जानकारी रखने के लिए उत्कृष्ट dateutil मॉड्यूल का उपयोग करने के लिए चाहते हो सकता है यूटीसी को हर समय सामान्य करने के लिए जागरूक डेटाटाइम ऑब्जेक्ट या जो कुछ भी आपको लगता है वह कमाल है।

+4

फीडपार्स से सभी '* _ वर्णित 'फ़ील्ड पहले से ही यूटीसी को सामान्यीकृत कर दिए जाते हैं [दिनांक पार्सिंग दस्तावेज] में चेक किया जा सकता है (https: // pythonhosted.org/feedparser/date-parsing.html?highlight=utc#supporting-additional-date-formats) तो यह अनावश्यक है। – itorres

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

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