माइक्रोसेकंड घटक के बिना स्ट्रिंग के लिए पायथन डेटाइम


410

मैं वर्तमान में केवल एम्स्टर्डम (!) टाइम स्ट्रिंग्स को शामिल करने वाली बिटकॉइन एपीआई प्रतिक्रियाओं के लिए यूटीसी समय के तार जोड़ रहा हूं। UTC समय के साथ संगति के लिए समय के तार कहीं और लौट आए, वांछित प्रारूप 2011-11-03 11:07:04(इसके बाद +00:00जर्मन नहीं है)।

(जैसे एक स्ट्रिंग बनाने के लिए सबसे अच्छा तरीका क्या है बिना एक से एक माइक्रोसेकंड घटक) datetimeउदाहरण के साथ एक माइक्रोसेकंड घटक?

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

मैं सबसे अच्छा विकल्प जोड़ूंगा जो मेरे लिए एक संभावित उत्तर के रूप में हुआ है, लेकिन एक और अधिक सुंदर समाधान हो सकता है।

संपादित करें: मुझे यह उल्लेख करना चाहिए कि मैं वास्तव में वर्तमान समय को नहीं छाप रहा हूं - मैं datetime.nowएक त्वरित उदाहरण प्रदान करता था। तो समाधान को यह नहीं मानना ​​चाहिए कि जो भी datetimeउदाहरण प्राप्त होंगे, उसमें माइक्रोसेकंड घटक शामिल होंगे।

जवाबों:


840

यदि आप datetimeकिसी विशिष्ट प्रारूप में किसी ऑब्जेक्ट को प्रारूपित करना चाहते हैं जो मानक प्रारूप से भिन्न है, तो उस प्रारूप को स्पष्ट रूप से निर्दिष्ट करना सबसे अच्छा है:

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

निर्देशों की व्याख्या के लिए प्रलेखनdatetime.strftime() देखें %


10
एक सहकर्मी ने सही दृष्टिकोण होने के लिए सिर्फ एक ठोस मामला बनाया। मेरी बात मानो।
davidchambers

3
वह ठोस मामला क्या था - इस समाधान को अपने समाधान के ऊपर डालकर datetime.replace का उपयोग कर?
मैटलहमान

13
@matlehmann: बेशक मैं davidchambers 'सहकर्मी के तर्क नहीं जानता। हालांकि, मुझे लगता है कि यदि आपका इरादा किसी बहुत ही विशिष्ट प्रारूप में तारीख को प्रिंट करने का है, तो आपको इस इरादे के बारे में स्पष्ट होना चाहिए। इस उत्तर में कोड कहता है "वर्तमान समय ले लो और इसे बिल्कुल इस तरह प्रारूपित करें"। अन्य उत्तर में कोड कहता है "वर्तमान समय ले लो, माइक्रोसेकंड को 0 पर सेट करें, और फिर इसे किसी तरह स्ट्रिंग में परिवर्तित करें"।
स्वेन मार्नाच 14'14

3
+1, स्ट्रिंग प्रारूप के बारे में स्पष्ट होने से समस्याओं से बचा जाता है यदि भविष्य के पायथन संस्करण में मानक डेटाटाइम-स्ट्रोक रूपांतरण में परिवर्तन होता है
एलन इवेंजेलिस्ता

2
@DylanYoung ओपी की आवश्यकता प्रारूप प्रारूप में डेटाटाइम ऑब्जेक्ट को प्रिंट करने के लिए है , जो मानक प्रारूप से अलग है .isoformat(), जिसमें डिफ़ॉल्ट रूप से माइक्रोसेकंड शामिल है। यदि आपको इसकी आवश्यकता है, तो इसके बारे में स्पष्ट रहें। हर कोई तुरंत समझ जाएगा कि यह कोड क्या करता है। दस्तावेज़ीकरण को देखे बिना शायद ही कोई दूसरा कोड समझेगा।
स्वेन मार्नाच

172
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07


1
मेरी स्थिति में, तिथि पहले ही निर्मित हो चुकी है और मुझे इसे दूसरे स्थान पर "मंजिल" करने की आवश्यकता है। यह एकदम सही है, धन्यवाद।
विगॉनड

1
यह सबसे अच्छा जवाब है!
हवोक

तुलना के लिए तार को प्रारूपण या पार्स करने से बेहतर है, धन्यवाद।
जच यंग

69

पायथन 3.6 में:

from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'

https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat


4
मुझे लगता है कि अब, पायथन 3.6 के आगमन के साथ 8 साल बाद यह स्वीकार किया जाना चाहिए, सार्वभौमिक जवाब। यह दोनों दुनिया के बेहतर होने के बारे में @DylanYoung और अलेक्जेंडर द्वारा इस एक ही सूत्र पर तर्क प्रस्तुत करता है
pfabri


47

इस तरह से मैं यह कर रहा हूँ। आईएसओ प्रारूप:

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'

यदि आप ISO प्रारूप नहीं चाहते हैं तो आप 'T' को बदल सकते हैं:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'

यह मेरे उत्तर के समान है। वहाँ के पक्ष में एक कारण है .isoformat()के ऊपर unicode()?
davidchambers

1
निर्भर करता है कि आप क्या चाहते हैं, यदि आप अजगर स्ट्रिंग प्रतिनिधित्व का उपयोग unicode()करना चाहते हैं , और यदि आप ISO-8601 चाहते हैं, तो उपयोग करेंisoformat()
radtek

समझा। निश्चित रूप unicode()से अधिक सुविधाजनक है .isoformat().replace('T', ' ')। ;)
davidchambers

मैं बस गैर-आईएसओ प्रारूप के लिए स्वेन के समाधान का उपयोग करूंगा, इसके अधिक स्पष्ट: datetime.now ()। स्ट्रैफ़ाइम ("% Y-% m-% d% H:% M"), लेकिन 'T' की जगह सिर्फ एक और है मार्ग। सबसे अच्छा समाधान हो सकता है यदि आपको आईएसओ और यूनिकोड तिथि दोनों की आवश्यकता है।
राडटेक

isoformatविभाजक विनिर्देश को स्वीकार करता है, इसलिए कोई प्रतिस्थापित नहीं किया जाना चाहिए। बस करते हैं:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
योया

17

फिर भी एक और विकल्प:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'

डिफ़ॉल्ट रूप से यह स्थानीय समय का उपयोग करता है, यदि आपको UTC की आवश्यकता है तो आप निम्नलिखित का उपयोग कर सकते हैं:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'

डाउनवोट क्योंकि ओपी ने डेटाइम के बारे में पूछा, समय नहीं।
जुरगेन ए। इरहार्ड

15

पहले 19 अक्षरों को रखें जिन्हें आप स्लाइसिंग के माध्यम से चाहते थे:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'

5
यह केवल गलत है क्योंकि टाइम स्ट्रिंग्स में टाइमज़ोन विनिर्देश जोड़ा जा सकता है, उदा +05:30। सही होगा str(now())[:19]
K3 --- rnc

1
@ K3 --- rnc: धन्यवाद। आपके सुझाव के अनुसार अपडेट किया गया।
स्टीवन रूमालस्की

वर्ष के बाद 10000, एक दूसरा चूक जाएगा
diti

समय बताएगा @diti;)
yǝs Febla

8

मैं आमतौर पर करता हूं:

import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0)  # To print now without microsecond.

# To print now:
print(now)

उत्पादन:

2019-01-13 14:40:28

7

चूंकि सभी datetime.datetimeउदाहरणों में माइक्रोसेकंड घटक नहीं है (अर्थात जब यह शून्य है), तो आप स्ट्रिंग को "" पर विभाजित कर सकते हैं। और केवल पहला आइटम लें, जो हमेशा काम करेगा:

unicode(datetime.datetime.now()).partition('.')[0]

3

हम नीचे कुछ कोशिश कर सकते हैं

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]

यह .isoformat(' ', 'seconds')पहले के उत्तर में प्रस्तावित, से नीच है ।
davidchambers

1
जब मैं प्रस्तावित पूर्व उत्तर के ऊपर प्रयास कर रहा हूं, तो मुझे नीचे त्रुटि हो रही है >>> datetime.datetime.now ()। Isoformat ('', 'सेकंड') Traceback (सबसे हालिया कॉल अंतिम): फ़ाइल "<stdin>", लाइन 1, में <मॉड्यूल> TypeError: isoformat () सबसे अधिक 1 तर्क लेता है (2 दिया गया)
अभिषेक बजाज

ओह समझा। यह मेरे लिए पायथन 3 में काम करता है लेकिन पायथन 2 में नहीं।
davidchambers

मैं अजगर 3.4.3 संस्करण का उपयोग कर रहा हूं, इसमें मुझे वह त्रुटि दिखाई दे रही है। >>> datetime.datetime.now ()। isoformat ('', 'सेकंड') Traceback (सबसे हाल ही में कॉल अंतिम): फ़ाइल "<stdin>", पंक्ति 1, में <मॉड्यूल> TypeError: isoforat () सबसे अधिक लेता है 1 तर्क (2 दिया गया)
अभिषेक बजाज

1

मुझे यह सबसे सरल तरीका लगा।

>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
>>> 

datetime.datetime.now ()। स्ट्रैफ़ाइम ("% Y-% m-% d% H:% M:% S") '2011-11-03 18:21:26' बहुत आसान imo। लेकिन आसान सबसे अच्छा नहीं है
An0n

1

यह मैं उपयोग करता हूं क्योंकि मैं इसे समझ सकता हूं और इसलिए इसे बेहतर तरीके से याद रख सकता हूं (और दिनांक समय प्रारूप भी आपकी पसंद के आधार पर अनुकूलित किया जा सकता है): -

import datetime
moment = datetime.datetime.now()
print("{}/{}/{} {}:{}:{}".format(moment.day, moment.month, moment.year,
                                 moment.hour, moment.minute, moment.second))

प्रतिभाशाली। सरल, लचीला और प्लेटफ़ॉर्म-इंडिपेंडेंट (स्ट्रैप्टाइम के विपरीत)।
दोनों
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.