पायथन स्ट्रैप्टाइम - दिनांक 0 के बिना?


277

जब पायथन का उपयोग कर रहे हैं strftime, तो क्या यह तारीख के पहले 0 को हटाने का एक तरीका है यदि यह 10 वीं से पहले है, अर्थात। इतना 01है 1? %उस के लिए एक बात नहीं मिल सकती ?

धन्यवाद!

जवाबों:


568

वास्तव में मुझे वही समस्या थी और मुझे एहसास हुआ कि, यदि आप %और पत्र के बीच एक हाइफ़न जोड़ते हैं, तो आप अग्रणी शून्य को हटा सकते हैं।

उदाहरण के लिए %Y/%-m/%-d

यह केवल यूनिक्स (लिनक्स, ओएस एक्स) पर काम करता है, न कि विंडोज (सिगविन सहित)। विंडोज पर, आप उपयोग करेंगे #, उदा %Y/%#m/%#d


11
मेरे लिए भी काम नहीं करता है, एक ValueError देता है (विंडोज़, अजगर 2.6)
रॉकेट नं।

14
इसने मेरे लिए OS X पर काम किया, लेकिन मैं python.org से पायथन 2.7.2 का उपयोग कर रहा हूं।
टिम स्वस्त

13
@mose मैंने इस बारे में एक सवाल पूछा :-) यहाँ जवाब है -> stackoverflow.com/questions/28894172/…
माथियास

10
मुझे मिलता है ValueError: '-' is a bad directive in format '%b %-d, %Y'। OSX, पायथन 2.7।
रिचर्ड

8
%#dविंडोज पर ऐसा ही होगा
dalle

190

हम formatpython2.6 के बाद से विधि के आगमन के साथ इस तरह की बात कर सकते हैं :

>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'

हालांकि मूल प्रश्न के दायरे से परे, अधिक दिलचस्प प्रारूपों के लिए, आप इस तरह से सामान कर सकते हैं:

>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'

और python3.6 के रूप में, यह एक इनलाइन स्वरूपित स्ट्रिंग के रूप में व्यक्त किया जा सकता है :

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt = datetime.datetime.now()
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}'
'Monday August 29, 2016'

2
बहुत अच्छा! दुर्भाग्य से अकेले काम नहीं करता है यदि आप पाठ प्रतिनिधित्व का उपयोग करना चाहते हैं time.strftime('%A %B %d, %Y'), जैसे कि पैदावार (अब, अंग्रेजी स्थान पर) Tuesday October 07, 2014
पेक्का क्लर्क

@ PekkaKlärck - अब तक मैंने आपकी टिप्पणी पर ध्यान नहीं दिया। यह पता चलता है कि डेटाइम एक बहुत ही दिलचस्प __format__हुक निर्दिष्ट करता है जो आपको इस तरह की चीजें लिखने की अनुमति देता है।
mgilson

2
एक समस्या यह है कि '{dt.hour}'24 घंटे की घड़ी का उपयोग किया जाता है :( दूसरा विकल्प का उपयोग करना अभी भी आपको '{%#I}'विंडोज और '{%-I}'यूनिक्स पर उपयोग करने के लिए वापस लाता है ।
ubomb

अच्छी बात। मैं कभी भी कोड में 12 घंटे की घड़ी का उपयोग नहीं करता, इसलिए मैंने उस मामले के बारे में नहीं सोचा।
एमफिलसन

मैं प्रारूप कार्यक्षमता पर इस अतिरिक्त दस्तावेज को देखने का सुझाव देता हूं: pyformat.info
मार्क

37

कुछ प्लेटफ़ॉर्म http://docs.python.org/library/time.html के% अनुसार और पत्र के बीच की चौड़ाई और सटीक विनिर्देश (जैसे 'महीने का दिन') का समर्थन कर सकते हैं, लेकिन यह निश्चित रूप से एक गैर-पोर्टेबल है समाधान (जैसे मेरे मैक पर काम नहीं करता; ;-) हो सकता है कि आप उपाय के बाद एक स्ट्रिंग प्रतिस्थापित (या आरई, वास्तव में गंदा प्रारूप के लिए) का उपयोग कर सकते हैं ? उदाहरण के लिए:strftime

>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'

@ गुगीनस तुम्हारा क्या मतलब है? यह '1 जनवरी 2000'
उपयोगकर्ता

6
@ उपयोगकर्ता उपरोक्त कोड को 0 से पहले एक रिक्त स्थान के लिए जांचता है जो "01 जनवरी 2000" के मामले में मौजूद नहीं है।
अलागप्पन रामू

@alex कृपया इस उत्तर को हटा दें, जैसा कि आप शायद जानते हैं, यह एक सही उत्तर से दूर है।
CONvid19

29

यहाँstrftime() GNU C लाइब्रेरी द्वारा समर्थित संशोधक का प्रलेखन है । (जैसा कि लोगों ने पहले कहा था, यह पोर्टेबल नहीं हो सकता है।) आपकी रुचि हो सकती है:

  • %eइसके बजाय %dएक स्थान के साथ महीने के दिन में अग्रणी शून्य को प्रतिस्थापित करेगा

यह मेरे पायथन (लिनक्स पर) पर काम करता है। मुझे नहीं पता कि यह आप पर काम करेगा।


3
Windows w / Python 2.6 पर% e मेरे लिए विफल है। मुझे लगता है कि यह * निक्स विशिष्ट है। बहुत बुरा :(
रॉकेट नंबर्स

1
यह सबसे साफ, सबसे सामान्य है, समाधान --- एक * निक्स सिस्टम पर, कम से कम। यह OS X पर काम करता है
BFTM

%-d उपरोक्त की तरह , यह पायथन 2.7.2 के साथ ओएस एक्स 10.8.5 में काम करता है, लेकिन पायथन 2.7.3 के साथ विंडोज 7 प्रो 64-बिट में नहीं।
जोहान

1
इसने मेरे लिए विंडोज 7 SP1 पर Python 3.5.1 के साथ काम किया।
नील बिलिंगम

1
इसने अग्रणी शून्य के बजाय एक अतिरिक्त स्थान पेश किया, इसलिए यदि आप एक सटीक मैच की तलाश में हैं तो यह नहीं हो सकता है। >>> एक = डेटाटाइम। लाइफटाइम (2019, 5, 1, 23, 28, 48, 175214) >>> one.strftime ('% b% e% H') '1 मई 23' >>> ग्यारह = डेटाटाइम .datetime (2019, 5, 11, 23, 28, 48, 175214) >>> ग्यारह। शास्त्र ('% b% ई% H')
'11

28
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'

1
यह 01 जनवरी 2000 से काम करता है, एलेक्स काम नहीं करता है।
गनियस

क्या करने की बात है .replace('X0','X').replace('X','')? बस करो .replace('X0', '')और यह अच्छा होगा।
मार्को बोनेली

2
@MarcoBonelli: स्ट्रिंग "X12 / X12 / 14" पर अपना सुझाव आज़माएं और आप देखेंगे।
gdw2

1
यह हैक है, लेकिन यह एक पायथनिक हैक है।
जोश एम।


18

पार्टी के लिए काफी देर से लेकिन %-dमेरे अंत पर काम करता है।

datetime.now().strftime('%B %-d, %Y')"5 नवंबर 2014" जैसा कुछ पैदा करता है

चीयर्स :)


1
अग्रणी उत्तर की नकल? stackoverflow.com/a/2073189/389812
gdw2

2
ValueError: Invalid format stringमेरे विंडोज सिस्टम में।
Deqing

10

मुझे लगता है कि Django टेम्पलेट दिनांक स्वरूपण फ़िल्टर त्वरित और आसान है। यह प्रमुख शून्य को बाहर निकालता है। यदि आपको Django मॉड्यूल आयात करने में कोई आपत्ति नहीं है, तो इसे देखें।

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')    

ध्यान दें कि यदि आप मेरे जैसे हैं और आप अपने ऐप को django में नहीं बना रहे हैं, तो आपको django को यह बताना होगा कि आपको इसे कॉन्फ़िगर करने की आवश्यकता नहीं है:import django.conf django.conf.settings.configure()
एलेक्स प्रेट्ज़लेव

8

-Bellow पर एक नज़र डालें :

>>> from datetime import datetime
>>> datetime.now().strftime('%d-%b-%Y')
>>> '08-Oct-2011'
>>> datetime.now().strftime('%-d-%b-%Y')
>>> '8-Oct-2011'
>>> today = datetime.date.today()
>>> today.strftime('%d-%b-%Y')
>>> print(today)

अजगर 3 में पूरी तरह से काम करता है
सौरभ

यह स्वीकृत उत्तर होना चाहिए। क्या पूछा जाता है, सुपर सरल और याद रखने में आसान है। डॉक्स के माध्यम से जल्दी से ब्राउज़ करना मुझे यह जानकारी नहीं मिल रही थी।
लुकास लीमा

1
"यह स्वीकृत उत्तर होना चाहिए"। नहीं, यह नहीं होना चाहिए, क्योंकि यह केवल लिनक्स पर काम करता है।
user136036


3

जब %dआप पूर्णांक का उपयोग करके परिवर्तित कर सकते हैं int()तो यह स्वतः ही प्रमुख 0 को हटा देगा और पूर्णांक बन जाएगा। तब आप वापस स्ट्रिंग का उपयोग करके परिवर्तित कर सकते हैं str()


2
ओपी प्रश्न स्ट्रैपीम के लिए कॉल में एक प्रारूप विनिर्देशक का उपयोग करते हुए एक समाधान के लिए था, बल्कि एक स्ट्रैट-इन-विल समाधान (जिसमें शामिल है) के बजाय
डेव हूपर

महान जवाब, हूपर को मत सुनो
टॉस्कन

3

उदाहरण के लिए, "% -d" एक ही OS के विभिन्न संस्करणों के बीच भी पोर्टेबल नहीं है। एक बेहतर समाधान यह होगा कि दिनांक घटकों को व्यक्तिगत रूप से निकाला जाए, और प्रत्येक घटक के लिए दिनांक विशिष्ट स्वरूपण ऑपरेटरों और तिथि विशेषता पहुंच के बीच चयन करें।

e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)

2

क्योंकि पायथन वास्तव में strftime(3)आपके मंच पर केवल सी भाषा फ़ंक्शन को कॉल करता है , यह हो सकता है कि ऐसे प्रारूप वर्ण हैं जिन्हें आप अग्रणी शून्य को नियंत्रित करने के लिए उपयोग कर सकते हैं; कोशिश करो man strftimeऔर देखो। लेकिन, निश्चित रूप से, परिणाम पोर्टेबल नहीं होगा, क्योंकि पायथन मैनुअल आपको याद दिलाएगा। :-)

मैं एक नई शैली का उपयोग कर की कोशिश करेंगे datetimeजो की तरह गुण होते हैं बजाय वस्तु, t.yearऔर t.monthऔर t.day, और के माध्यम से उन डाल सामान्य, उच्चस्तरीय का स्वरूपण %ऑपरेटर, जो अग्रणी शून्य के समर्थन नियंत्रण करता है। देखें http://docs.python.org/library/datetime.html जानकारी के लिए। बेहतर अभी तक, "".format()ऑपरेटर का उपयोग करें यदि आपके पायथन में यह है और इससे भी अधिक आधुनिक हो; इसमें संख्याओं के साथ-साथ बहुत सारे प्रारूप विकल्प भी हैं। देखें: http://docs.python.org/library/string.html#string-formatting


2

एलेक्स के तरीके के आधार पर, यह स्टार्ट-ऑफ-स्ट्रिंग और आफ्टर-स्पेस दोनों मामलों के लिए काम करेगा:

re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")

मुझे यह .format या% -d से बेहतर लगता है क्योंकि यह क्रॉस-प्लेटफ़ॉर्म है और मुझे स्ट्रैफ़ाइम ("नवंबर" और "सोमवार" जैसी चीजें प्राप्त करने के लिए) का उपयोग करने की अनुमति देता है।


1

पुराना प्रश्न, लेकिन% l (लोअर-केस L) ने मेरे लिए स्ट्रैफ़टाइम में काम किया: यह सभी के लिए काम नहीं कर सकता है, हालाँकि, जैसा कि पायथन डॉक्यूमेंटेशन में मुझे सूचीबद्ध नहीं मिला है


1
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")

यह एक अंतरिक्ष के साथ अग्रणी शून्य को बदल देता है, जो कि ओपी ने क्या नहीं पूछा है
डेव हूपर

ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'अजगर 3.5
जीआई-आरएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.