2011-11-05 8 views
34

पाइथन में कनवर्ट करना, मैं datetime.datetime को float के प्रकार में कैसे परिवर्तित करूं जो मुझे time.time फ़ंक्शन से प्राप्त होगा?पायथन: `datetime.datetime` से` time.time '

+0

संबंधित: (http://stackoverflow.com/a/8778548/4279) – jfs

उत्तर

32

यह समय टपल विधि का उपयोग करने और अभी भी माइक्रोसेकंड बनाए रखने मुश्किल नहीं है:

>>> t = datetime.datetime.now() 
>>> t 
datetime.datetime(2011, 11, 5, 11, 26, 15, 37496) 

>>> time.mktime(t.timetuple()) + t.microsecond/1E6 
1320517575.037496 
+1

क्या आप समझा सकते हैं कि यह समाधान '(dt - datetime.datetime.utcfromtimestamp (0)) से बेहतर क्यों है। कुल_सेकंड()'? माइक्रोसॉन्ड का मैनुअल जोड़ा मेरे लिए सुरुचिपूर्ण लगता है। –

+2

@ रामरामचम: आपका सूत्र मानता है कि 'डीटी' यूटीसी समय है। 'mktime()' मानता है कि इनपुट स्थानीय समय है। आपको बेवकूफ डेटाटाइम ऑब्जेक्ट्स का उपयोग करने से बचना चाहिए जो स्थानीय समय का प्रतिनिधित्व करते हैं जबतक कि आप उन्हें तुरंत प्रदर्शित नहीं करना चाहते हैं। इसके बजाय यूटीसी समय या टाइमज़ोन-जागरूक डेटाटाइम ऑब्जेक्ट्स का उपयोग करें। – jfs

11

एक datetime.datetime वस्तु dt देखते हुए, आप इस्तेमाल कर सकते हैं

(dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() 

उदाहरण:

>>> dt = datetime.datetime.now(); t = time.time() 
>>> t 
1320516581.727343 
>>> (dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() 
1320516581.727296 

ध्यान दें कि timedelta.total_seconds() विधि पायथन 2.7 में पेश किया गया था।

+1

'((24 * 3600 * td.days + टीडी [अजगर में यूटीसी टाइमस्टैम्प के datetime.date परिवर्तित] .seconds) * 1000000 + td.microseconds)/1e6' पायथन पर <2.7 – jfs

6

datetime.timetuple() और time.mktime() का एक संयोजन:

>>> import datetime 
>>> import time 
>>> now = datetime.datetime.now() 
>>> secondsSinceEpoch = time.mktime(now.timetuple()) 
+0

यह उप- उस समय का दूसरा हिस्सा। –

+0

+1 क्योंकि यह उत्तर वैसे भी सहायक है और डाउनवोट उचित नहीं है। –

+0

मेरे द्वारा +1 भी। मैं दोनों गणनाओं पर स्वेन से सहमत हूं :-) –

21
time.mktime(dt_obj.timetuple()) 

चाल करना चाहिए।

+5

यह उस समय के उप-दूसरे भाग को छोड़ देता है। –

+3

+1 क्योंकि यह उत्तर वैसे भी सहायक है और डाउनवोट उचित नहीं है। –

3

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन अजगर में 3.3+ वहाँ अब का उपयोग कर यह करने के लिए एक आसान तरीका है datetime.timestamp() विधि:

from datetime import datetime 
timestamp = datetime.now().timestamp() 
+2

'timestamp = time.time()' – jfs

+0

यह इस विशिष्ट मामले को संभालेगा (वर्तमान टाइमस्टैम्प ढूंढें), लेकिन 'datetime.timestamp()' 'का उपयोग करके अधिक शक्तिशाली है क्योंकि यह आपको मनमाने ढंग से डेटाटाइम पर टाइमस्टैम्प ढूंढने की अनुमति देता है। – lsowen

+0

तब एक बेहतर उदाहरण प्रदान करें। क्योंकि '.now()। टाइमस्टैम्प()' 'time.time()' से सख्ती से भी बदतर है। पूर्व डीएसटी संक्रमण के दौरान गलत परिणाम उत्पन्न कर सकता है। एक बेहतर उदाहरण: '.now (utc) .timestamp()' (कम से कम, यह सही परिणाम उत्पन्न करता है)। – jfs