एक नियमित प्रारूप में तारीख कैसे प्रिंट करें?


682

यह मेरा कोड है:

import datetime
today = datetime.date.today()
print(today)

यह प्रिंट करता है: 2008-11-22जो वास्तव में मैं चाहता हूं।

लेकिन, मेरे पास एक सूची है जिसे मैं इसमें शामिल कर रहा हूं और फिर अचानक सब कुछ "जीत" हो जाता है। यहाँ कोड है:

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)

यह निम्नलिखित प्रिंट करता है:

[datetime.date(2008, 11, 22)]

मैं सिर्फ एक साधारण तिथि कैसे प्राप्त कर सकता हूं 2008-11-22?


13
संक्षिप्त उत्तर:str() (सूची के प्रत्येक तत्व के लिए) आवेदन करके , क्योंकि यह सिर्फ वही है जो printआपके एकल todayऑब्जेक्ट के लिए किया गया था ।
लुत्ज प्रेचल

जवाबों:


947

WHY: दिनांक ऑब्जेक्ट हैं

पायथन में, तिथियां ऑब्जेक्ट हैं। इसलिए, जब आप उन्हें हेरफेर करते हैं, तो आप वस्तुओं में हेरफेर करते हैं, तार नहीं, टाइमस्टैम्प नहीं और न ही कुछ भी।

पायथन में किसी भी वस्तु का दो स्ट्रिंग प्रतिनिधित्व है:

  • नियमित रूप से प्रतिनिधित्व जो "प्रिंट" द्वारा उपयोग किया जाता है, str()फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है। यह उस समय का सबसे आम मानव पठनीय प्रारूप है और इसका उपयोग प्रदर्शन को आसान बनाने के लिए किया जाता है। तो str(datetime.datetime(2008, 11, 22, 19, 53, 42))आपको देता है '2008-11-22 19:53:42'

  • वैकल्पिक प्रतिनिधित्व जिसका उपयोग वस्तु प्रकृति (एक डेटा के रूप में) का प्रतिनिधित्व करने के लिए किया जाता है। यह repr()फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है और यह जानना आसान है कि आपके द्वारा विकसित या डीबग करते समय किस तरह का डेटा हेरफेर करता है। repr(datetime.datetime(2008, 11, 22, 19, 53, 42))आपको देता है 'datetime.datetime(2008, 11, 22, 19, 53, 42)'

क्या हुआ कि जब आपने "प्रिंट" का उपयोग करके तारीख मुद्रित की है, str()तो इसका उपयोग किया गया ताकि आप एक अच्छी तारीख स्ट्रिंग देख सकें। लेकिन जब आपने प्रिंट किया है mylist, तो आपने वस्तुओं की एक सूची मुद्रित की है और अजगर ने डेटा के सेट का उपयोग करने का प्रयास किया है repr()

कैसे: आप उसके साथ क्या करना चाहते हैं?

ठीक है, जब आप तारीखों में हेरफेर करते हैं, तो पूरे दिन तारीख वस्तुओं का उपयोग करते रहें। उन्हें उपयोगी तरीकों के हजार मिले और अधिकांश पायथन एपीआई को उम्मीद है कि तारीखें वस्तुएं होंगी।

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

एक अंतिम बात। जब आपने तिथियों को प्रिंट करने का प्रयास किया, तो आपने मुद्रित किया mylist। यदि आप एक तारीख प्रिंट करना चाहते हैं, तो आपको तारीख वस्तुओं को प्रिंट करना होगा, न कि उनके कंटेनर (सूची) को।

ईजी, आप एक सूची में सभी तारीख प्रिंट करना चाहते हैं:

for date in mylist :
    print str(date)

ध्यान दें कि उस विशिष्ट मामले में , आप इसे छोड़ भी सकते हैं str()क्योंकि प्रिंट आपके लिए इसका उपयोग करेगा। लेकिन यह एक आदत नहीं बननी चाहिए :-)

अपने कोड का उपयोग करके व्यावहारिक मामला

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22

# It's better to always use str() because :

print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22

print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects

print "This is a new day : " + str(mylist[0]) 
>>> This is a new day : 2008-11-22

उन्नत दिनांक स्वरूपण

तिथियों में एक डिफ़ॉल्ट प्रतिनिधित्व होता है, लेकिन आप उन्हें एक विशिष्ट प्रारूप में मुद्रित करना चाह सकते हैं। उस स्थिति में, आप strftime()विधि का उपयोग करके एक कस्टम स्ट्रिंग प्रतिनिधित्व प्राप्त कर सकते हैं ।

strftime() एक स्ट्रिंग पैटर्न की व्याख्या करने की अपेक्षा करता है कि आप अपनी तिथि को कैसे प्रारूपित करना चाहते हैं।

ईजी:

print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'

सभी पत्र के बाद "%"कुछ के लिए एक प्रारूप का प्रतिनिधित्व:

  • %d दिन का नंबर है
  • %m महीने की संख्या है
  • %b महीने का संक्षिप्त नाम है
  • %y वर्ष अंतिम दो अंक है
  • %Y सभी वर्ष है

आदि

आधिकारिक दस्तावेज़ीकरण पर एक नज़र डालें , या मैकूचेन के त्वरित संदर्भ को आप उन सभी को नहीं जान सकते।

PEP3101 के बाद से , प्रत्येक ऑब्जेक्ट का अपना प्रारूप किसी भी स्ट्रिंग के विधि प्रारूप द्वारा स्वचालित रूप से उपयोग किया जा सकता है। डेटाइम के मामले में, प्रारूप वही है जो स्ट्रैफ़टाइम में उपयोग किया जाता है। तो आप इस तरह से ऊपर जैसा कर सकते हैं:

print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'

इस रूप का लाभ यह है कि आप एक ही समय में अन्य वस्तुओं को भी परिवर्तित कर सकते हैं। फॉर्मैटेड स्ट्रिंग शाब्दिक (पायथन 3.6, 2016-12-23 के बाद से)
की शुरुआत के साथ इसे लिखा जा सकता है

import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'

स्थानीयकरण

यदि आप उन्हें सही तरीके से उपयोग करते हैं, तो तिथियां स्वचालित रूप से स्थानीय भाषा और संस्कृति के अनुकूल हो सकती हैं, लेकिन यह थोड़ा जटिल है। शायद एसओ (स्टैक ओवरफ्लो) पर एक और सवाल के लिए ;-)


3
BTW अजगर में लगभग हर डेटा प्रकार एक वर्ग है (अपरिवर्तनीयों को छोड़कर, लेकिन उन्हें उप
वर्गित

1
आपका क्या मतलब है "लगभग"? str और int में एक वर्ग गुण होता है, जिसमें 'प्रकार' शामिल होता है, इसके बाद स्वयं वर्ग होते हैं, क्योंकि वे प्रकार के मेटाक्लास के उदाहरण हैं।
ई-सतीस

4
यह बिल्कुल शब्दावली का सवाल है: प्रकार! = वर्ग ?, अर्थात क्या यह पर्याप्त प्रकार की विशेषता है (किसी वस्तु के लिए योग्य होने के लिए प्रकार का अनुमान तंत्र प्रदान करें) या एक वस्तु के रूप में व्यवहार करना चाहिए। मैं अपने लिए यहाँ प्रोग्रामर.स्टैकएक्सचेंज
com

1
यदि आप एक वर्ग के उदाहरण हैं, तो आप एक वस्तु हैं। आपको अधिक जटिल होने के लिए इसकी आवश्यकता क्यों होगी?
e-satis

9
पाइथन में प्रत्येक मूल्य एक वस्तु है। हर वस्तु का एक प्रकार होता है। "टाइप" == "क्लास" औपचारिक रूप से (यह भी inspect.isclassसुनिश्चित करने के लिए देखें )। लोग बिल्ट-इन के लिए "टाइप" और बाकी के लिए "क्लास" कहने लगते हैं, लेकिन यह महत्वपूर्ण नहीं है
कोस

340
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

संपादित करें:

Cees के सुझाव के बाद, मैंने समय का उपयोग करना शुरू कर दिया है:

import time
print time.strftime("%Y-%m-%d %H:%M")


2
आप datetime import datetimeऔर तब से उपयोग कर सकते हैं print datetime().now().strftime("%Y-%m-%d %H:%M")। केवल एक सिंटैक्स अंतर।
डैनियल मैग्नसन

7
from datetime import date; date.today().strftime("%Y-%m-%d")अभी भी मेरे लिए unpythonic लग रहा है, लेकिन यह बिना सबसे अच्छा है import time। मुझे लगता है कि डेटाइम मॉड्यूल डेट मैथ के लिए है।
सेस टिम्मरमैन

2
मेरी पसंदीदा है from datetime import datetime as dtऔर अब हम साथ खेल सकते हैंdt.now()
diewland

164

एक स्पष्ट प्रारूप स्ट्रिंग के नियंत्रण के तहत समय का प्रतिनिधित्व करने के लिए एक स्ट्रिंग बनाने के लिए दिनांक, डेटाटाइम और समय ऑब्जेक्ट सभी एक स्ट्रैपटाइम (प्रारूप) विधि का समर्थन करते हैं।

यहां उनके निर्देश और अर्थ के साथ प्रारूप कोड की एक सूची दी गई है।

    %a  Locales abbreviated weekday name.
    %A  Locales full weekday name.      
    %b  Locales abbreviated month name.     
    %B  Locales full month name.
    %c  Locales appropriate date and time representation.   
    %d  Day of the month as a decimal number [01,31].    
    %f  Microsecond as a decimal number [0,999999], zero-padded on the left
    %H  Hour (24-hour clock) as a decimal number [00,23].    
    %I  Hour (12-hour clock) as a decimal number [01,12].    
    %j  Day of the year as a decimal number [001,366].   
    %m  Month as a decimal number [01,12].   
    %M  Minute as a decimal number [00,59].      
    %p  Locales equivalent of either AM or PM.
    %S  Second as a decimal number [00,61].
    %U  Week number of the year (Sunday as the first day of the week)
    %w  Weekday as a decimal number [0(Sunday),6].   
    %W  Week number of the year (Monday as the first day of the week)
    %x  Locales appropriate date representation.    
    %X  Locales appropriate time representation.    
    %y  Year without century as a decimal number [00,99].    
    %Y  Year with century as a decimal number.   
    %z  UTC offset in the form +HHMM or -HHMM.
    %Z  Time zone name (empty string if the object is naive).    
    %%  A literal '%' character.

यह वही है जो हम पायथन में डेटाइम और टाइम मॉड्यूल के साथ कर सकते हैं

    import time
    import datetime

    print "Time in seconds since the epoch: %s" %time.time()
    print "Current date and time: ", datetime.datetime.now()
    print "Or like this: ", datetime.datetime.now().strftime("%y-%m-%d-%H-%M")


    print "Current year: ", datetime.date.today().strftime("%Y")
    print "Month of year: ", datetime.date.today().strftime("%B")
    print "Week number of the year: ", datetime.date.today().strftime("%W")
    print "Weekday of the week: ", datetime.date.today().strftime("%w")
    print "Day of year: ", datetime.date.today().strftime("%j")
    print "Day of the month : ", datetime.date.today().strftime("%d")
    print "Day of week: ", datetime.date.today().strftime("%A")

यह कुछ इस तरह से प्रिंट होगा:

    Time in seconds since the epoch:    1349271346.46
    Current date and time:              2012-10-03 15:35:46.461491
    Or like this:                       12-10-03-15-35
    Current year:                       2012
    Month of year:                      October
    Week number of the year:            40
    Weekday of the week:                3
    Day of year:                        277
    Day of the month :                  03
    Day of week:                        Wednesday

1
इससे मेरी समस्या हल हो गई, जहां "अधिक-उत्क्रमित-उत्तर" नहीं था। लेकिन मेरा मुद्दा ओपी से अलग था। मैं महीनों को "2" के बजाय पाठ ("फरवरी") के रूप में मुद्रित करना चाहता था
नथन



27
# convert date time to regular format.

d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)

# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)

आउटपुट

2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34

25

या और भी

from datetime import datetime, date

"{:%d.%m.%Y}".format(datetime.now())

आउट: '25 .12.2013

या

"{} - {:%d.%m.%Y}".format("Today", datetime.now())

आउट: 'आज - 25.12.2013'

"{:%A}".format(date.today())

बाहर: 'बुधवार'

'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())

आउट: '__main ____ 2014.06.09__16-56.log'



8

टाइप-विशिष्ट datetimeस्ट्रिंग फ़ॉर्मेटिंग के साथ (देखें nk9 का उत्तर का उपयोग करें str.format()।) एक फॉर्मेटेड स्ट्रिंग शाब्दिक में (पायथन 3.6, 2016-12-23 के बाद से):

>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'

दिनांक / समय प्रारूप निर्देशों के भाग के रूप में प्रलेखित नहीं प्रारूप स्ट्रिंग सिंटेक्स बल्कि में लेकिन date, datetimeहै, और timeके strftime()प्रलेखन। 1989 सी मानक पर आधारित हैं, लेकिन पायथन 3.6 के बाद से कुछ आईएसओ 8601 निर्देश शामिल हैं।


ध्यान दें कि मैंने इस जानकारी को स्वीकृत उत्तर में भी जोड़ा है ।
संभाल

strftime में वास्तव में "ISO 8601 आउटपुट" शामिल नहीं है। "निर्देश" हैं, लेकिन केवल "सप्ताह के दिन" जैसे विशिष्ट टोकन के लिए, न कि पूरे आईएसओ 8601 टाइमस्टैम्प, जो मैंने हमेशा कष्टप्रद पाया है।
अनारकट

5

आपको दिनांक समय ऑब्जेक्ट को एक स्ट्रिंग में बदलने की आवश्यकता है।

निम्नलिखित कोड ने मेरे लिए काम किया:

import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection

मुझे बताना, अगर आप को किसी भी अधिक मदद की ज़रूरत हो।


3
आ जाओ ! डेट ऑब्जेक्ट के बजाय स्ट्रिंग को स्टोर करने के लिए एक नौसिखिया को प्रोत्साहित न करें। वह यह नहीं जान पाएगा कि यह अच्छा या बुरा विचार कब है ...
ई-सटिस

ई-सतीस: यदि आप सभी की जरूरत है एक स्ट्रिंग है, क्या बड़ी बात है? हम अपने फर्मवेयर बिल्ड की तारीखों को हर समय तार के रूप में स्टोर करते हैं - कभी-कभी एक संपूर्ण ऑब्जेक्ट को स्टोर करने पर ओवरकिल हो जाता है जब आपको ज़रूरत होती है एक साधारण टाइमस्टैम्प (YAGNI और सभी)।
19Cl में हनक्लिंटो

3
हां, कुछ मामलों में यह है। मेरा मतलब है कि सिर्फ एक नौसिखिया इन मामलों की पहचान करने में सक्षम नहीं होगा। तो चलिए दाहिने पैर से शुरू करते हैं :-)
e-satis

4

मुझे सुविधा के लिए बहुत सारे मॉड्यूल आयात करने के विचार से नफरत है। मैं उपलब्ध मॉड्यूल के साथ काम करूंगा जो इस मामले में datetimeएक नए मॉड्यूल को कॉल करने के बजाय है time

>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'

1
मुझे लगता है कि कोड की एक पंक्ति में ऐसा करना अधिक कुशल होगाa = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
डोरियन डोर


3

इस तथ्य को ध्यान में रखते हुए कि आपने कुछ सरल करने के लिए कहा, जो आप चाहते थे, आप बस:

import datetime
str(datetime.date.today())

3

स्थान-आधारित तिथि चाहने वालों के लिए और समय सहित, उपयोग के लिए:

>>> some_date.strftime('%x')
07/11/2019

2

आप इसे एक स्ट्रिंग के रूप में जोड़ना चाह सकते हैं?

import datetime 
mylist = [] 
today = str(datetime.date.today())
mylist.append(today) 
print mylist

2

चूंकि print todayआप जो चाहते हैं वह रिटर्न का मतलब है कि आज के ऑब्जेक्ट का __str__फ़ंक्शन उस स्ट्रिंग को वापस करता है जिसे आप ढूंढ रहे हैं।

तो आप भी कर सकते हैं mylist.append(today.__str__())



1

मेरे जवाब के लिए एक त्वरित अस्वीकरण - मैं केवल 2 सप्ताह के लिए पायथन सीख रहा हूं, इसलिए मैं किसी भी तरह से विशेषज्ञ नहीं हूं; इसलिए, मेरी व्याख्या सबसे अच्छी नहीं हो सकती है और मैं गलत शब्दावली का उपयोग कर सकता हूं। वैसे भी, यहाँ यह जाता है।

मैंने आपके कोड में देखा कि जब आपने अपना चर घोषित किया था, तो आपने अपने चर today = datetime.date.today()को एक अंतर्निहित फ़ंक्शन के नाम के साथ चुना था।

जब आपकी कोड की अगली पंक्ति ने mylist.append(today)आपकी सूची को जोड़ दिया, तो इसने पूरे स्ट्रिंग को जोड़ दिया datetime.date.today(), जिसे आपने पहले अपने todayवेरिएबल के मान के रूप में सेट किया था , बजाय केवल अपग्रेड करने के today()

एक सरल समाधान, यद्यपि शायद कोई भी अधिकांश कोडर का उपयोग नहीं करेगा जब डेटाटाइम मॉड्यूल के साथ काम करना है, आपके चर का नाम बदलना है।

यहाँ मैंने क्या कोशिश की है:

import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present

और यह प्रिंट करता है yyyy-mm-dd


1

इस प्रकार दिनांक (वर्ष / माह / दिन) प्रदर्शित करना है:

from datetime import datetime
now = datetime.now()

print '%s/%s/%s' % (now.year, now.month, now.day)

1
from datetime import date
def time-format():
  return str(date.today())
print (time-format())

यदि आप चाहते हैं कि यह 6-23-2018 मुद्रित होगा :)


-1
import datetime
import time

months = ["Unknown","January","Febuary","Marchh","April","May","June","July","August","September","October","November","December"]
datetimeWrite = (time.strftime("%d-%m-%Y "))
date = time.strftime("%d")
month= time.strftime("%m")
choices = {'01': 'Jan', '02':'Feb','03':'Mar','04':'Apr','05':'May','06': 'Jun','07':'Jul','08':'Aug','09':'Sep','10':'Oct','11':'Nov','12':'Dec'}
result = choices.get(month, 'default')
year = time.strftime("%Y")
Date = date+"-"+result+"-"+year
print Date

इस तरह आप दिनांक को इस तरह से प्रारूपित कर सकते हैं: 22-जून -2017


1
किसी चीज़ के लिए बहुत अधिक कोड आपको एक पंक्ति में मिल सकता है। आपके साथ %bपहले तीन महीने के शब्द मिलेंगे, और %Bपूरे महीने के साथ। उदाहरण: datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")'2018-Oct-04 09:44:08' पर लौटेंगे
Víctor López

-1

मैं पूरी तरह से समझ में नहीं आता है, लेकिन pandasसही प्रारूप में समय प्राप्त करने के लिए उपयोग कर सकते हैं :

>>> import pandas as pd
>>> pd.to_datetime('now')
Timestamp('2018-10-07 06:03:30')
>>> print(pd.to_datetime('now'))
2018-10-07 06:03:47
>>> pd.to_datetime('now').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime('now').date())
2018-10-07
>>> 

तथा:

>>> l=[]
>>> l.append(pd.to_datetime('now').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
['2018-10-07']

लेकिन यह तार संचय कर रहा है लेकिन परिवर्तित करना आसान है:

>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp('2018-10-07 00:00:00')]

4
कुछ करने के लिए एक पूरी निर्भरता python std पुस्तकालय करने के तरीके हैं?
हज्जाज़मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.