शून्य-पैडिंग के बिना पायथन डेटाइम फॉर्मेटिंग


90

क्या पायथन डेटाइम को प्रिंट करने का कोई प्रारूप है जो दिनांक और समय पर शून्य-पैडिंग का उपयोग नहीं करेगा?

मैं अब उपयोग कर रहा हूं प्रारूप:

mydatetime.strftime('%m/%d/%Y %I:%M%p')

परिणाम: 02/29/2012 05:03 PM
वांछित: 2/29/2012 5:03 PM

क्या स्वरूप '02' के बजाय '2' के रूप में महीने का प्रतिनिधित्व करेगा, और समय '05: 03MM 'के बजाय' 5:03 PM 'के रूप में होगा।

जवाबों:


77

datetime.strftime()सभी के साथ उपलब्ध स्वरूपण विकल्प शून्य-पैड होंगे। आप निश्चित रूप से अपने स्वरूपण फ़ंक्शन को रोल कर सकते हैं, लेकिन इस मामले में सबसे आसान समाधान हो सकता है datetime.strftime():

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")

1
स्वेन- क्योंकि मैं फेसबुक जैसा दिखना चाहता हूं। धन्यवाद!
यारिन

4
बहुत कम लोग हाथ से समय लिखते समय उत्तरी अमेरिका में शून्य-पेड घंटे का उपयोग करते हैं।
एरिक वॉकर

2
यह अभी भी महीने के दिन शून्य पैड नहीं होगा?
बजे जज मेगार्डन

1
@JudgeMaygarden: इस कारण समाधान .lstrip("0")प्रमुख शून्य से छुटकारा पाने के लिए करता है।
स्वेन मार्नाच

1
मैं पैड जीरो को क्यों निकालना चाहता हूं? क्योंकि यह RFC 2822 द्वारा गलत है , उदाहरण के लिए पॉडकास्ट फीड में।
विटाली ज़डनेविच

172

उपरोक्त शून्य पहलू से "सभी या कोई भी" प्रमुख शून्य पहलू से बचने के लिए अन्य वैकल्पिक क्षेत्र प्रकार के सामने माइनस रखना है:

mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

फिर यह: '4/10/2015 03:00 AM'

बने: '4/10/2015 3:00 AM'

आप चाहें तो दिन के सामने वैकल्पिक रूप से माइनस रख सकते हैं।

संपादित करें: माइनस फीचर GNU C लाइब्रेरी ("glibc") से निकलता है, जैसा कि "Glibc नोट्स" के अंतर्गत लिनक्स स्ट्रैफ़टाइम मैनपेज में वर्णित है।


50
शानदार जवाब, लेकिन केवल लिनक्स। विंडोज पर काम नहीं करेगा। stackoverflow.com/questions/10807164/…
ExactaBox

1
यह काम क्यों करता है? मैं के लिए डॉक्स में इस के लिए एक संदर्भ नहीं मिल सकता है date.__format__या time.strftime, docs.python.org/3/library/... , और docs.python.org/3.8/library/time.html#time.strftime क्रमशः
अमीन शाह गिलानी

95

नई स्ट्रिंग स्वरूपण प्रणाली के लिए एक विकल्प प्रदान करता है strftime। यह काफी पठनीय है - वास्तव में, यह strftimeउस खाते पर बेहतर हो सकता है । इस तथ्य का उल्लेख नहीं करना कि यह शून्य-पैड नहीं है:

>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'

चूँकि आप शायद मिनट क्षेत्र में शून्य पैडिंग चाहते हैं, आप ऐसा कर सकते हैं:

>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'

यदि आप "सैन्य" समय के बजाय "नियमित" समय चाहते हैं, तो आप अभी भी मानक strftimeविनिर्देशक का उपयोग कर सकते हैं । आसानी से, हमारे उद्देश्यों के लिए, एक प्रमुख शून्य के बजाय रिक्त के साथ 12-घंटे के समय के लिए एक कोड प्रदान strftime करता है:

'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014  6:00PM'

यह कुछ कम पठनीय हो जाता है, अफसोस। और जैसा कि @mlissner बताते हैं, strftime1900 से पहले की तारीखों के कुछ (सभी?) प्लेटफ़ॉर्म पर विफल हो जाएंगे।


1
यह अजगर 2.6 के बाद से आसपास है। (यह नया नहीं है ।)
प्रेषक

3
उदाहरण के लिए, महीने के लिए, आप निम्नलिखित का उपयोग कर सकते हैं: "{0.day} {0:%B %Y}".format(d)जो आपको '2 August 2013'इस टिप्पणी के दिन के रूप में देगा :)
जेन्स

2
यह दिलचस्प है, लेकिन यह वास्तव में ओपी का जवाब नहीं देता है, क्योंकि वह एएम / पीएम घंटे चाहता है। मैं वास्तव में इसे कम नहीं करने जा रहा हूं, लेकिन स्वीकृत उत्तर वास्तव में सही है यदि आप अजगर में "अमेरिकी" तिथि / समय प्रारूपित करने की कोशिश कर रहे हैं।
डाना कार्टराइट

ध्यान दें कि यह तकनीक स्ट्रैफ़ाइम का उपयोग करती है, जो 1900 से पहले की तारीखों में विफल हो जाएगी। यदि आपके पास पुरानी तारीखें हैं, तो आपको इस पर पछतावा होगा।
17

1
fak! मुझे बस एहसास हुआ कि जहाँ मैंने किसी अन्य वस्तु के लिए d को इंगित नहीं किया है, मैंने इसे केवल एक स्थितिगत arg के रूप में पारित किया है।
याकूब

54

स्वीकृत उत्तर उचित समाधान नहीं (IMHO) उचित प्रलेखित तरीके:

लिनक्स में "#" को "-" द्वारा बदल दिया गया है:

% -d,% -H,% -I,% -j,% -M,% -M,% -S,% -U,% -w,% -W,% -y,% -Y

विंडोज में "-" को "#" से बदल दिया जाता है:

% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y

#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')

स्रोत: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

जैसा कि सग्नेता ने कहा है: विंडोज पर # हैश ट्रिक केवल देशी पायथन निष्पादन योग्य के लिए उपलब्ध है। यह साइबर-आधारित अजगर कार्यान्वयन के लिए काम नहीं करेगा।


3
यह सही है। हालांकि ध्यान दें कि विंडोज पर # हैश ट्रिक केवल देशी पायथन निष्पादन योग्य के लिए उपलब्ध है। दूसरे शब्दों में, यह साइबर-आधारित अजगर कार्यान्वयन के लिए काम नहीं करेगा।
सग्नेता

2
वाह यह जानने के लिए बहुत अच्छा है लेकिन मैं परिणाम से भयभीत हूं। मैं डेटिंग फॉर्मेटिंग का परीक्षण डेटाबेस से कर रहा हूं और मुझे प्रत्येक टेस्ट के लिए अपेक्षित फॉर्मेटिंग में पास होने की जरूरत है और इससे कई जटिलताएं बढ़ जाती हैं।
कीथ

12

लिनक्स पर क्रिस फ्रीमैन का अच्छा जवाब।

खिड़कियों पर, यह है:

mydate.strftime('%#m/%#d/%Y')

सोचा कि मदद कर सकते हैं।


0

"% l" (यह एक लोअर-केस L है) घंटे के लिए काम करता है ("% I" के बजाय)। मैं केवल यहाँ एक और उत्तर से यह जानता हूँ

पायथन स्ट्रैप्टाइम - 0 के बिना तारीख?

लेकिन दुर्भाग्य से उनके पास दिनांक / समय के अन्य तत्वों के लिए कोड नहीं है।


pd.to_datetime (dt ['time'], format = '% l:% M:% S', infer_datetime_format = True) अभी भी% l मेरे लिए काम नहीं कर रहा है के बाद: त्रुटि: - फाइल "pasas_libs \ tslibs \ conversion.pyx" , लाइन 399, pandas._libs.tslibs.conversion.convert_datetime_to_tsobject फ़ाइल में "pandas_libs \ tslibs \ np_datetime.x", लाइन 117, pandas._libs.tslibs.np://c=1818-2018 में, वास्तविक समय में। नेनोसेकंड टाइमस्टैम्प की सीमा: 1-01-01 09:15:59
अंकुर त्रिपाठी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.