पार्स डेट स्ट्रिंग और परिवर्तन प्रारूप


115

मेरे पास 'Mon Feb 15 2010' प्रारूप के साथ एक तारीख स्ट्रिंग है। मैं प्रारूप को '15 / 02/2010 'में बदलना चाहता हूं। मैं यह कैसे कर सकता हूँ?


इन सभी का डुप्लिकेट: stackoverflow.com/search?q=%5Bpython%5D+parse+date । इसका सटीक डुप्लिकेट: stackoverflow.com/questions/1713594/…
S.Lott

जवाबों:


153

datetime मॉड्यूल आपकी मदद कर सकता है:

datetime.datetime.strptime(date_string, format1).strftime(format2)

विशिष्ट उदाहरण के लिए आप कर सकते हैं

>>> datetime.datetime.strptime('Mon Feb 15 2010', '%a %b %d %Y').strftime('%d/%m/%Y')
'15/02/2010'
>>>

2
datetime.datetime (Mon Feb 15 2010, "% a% b% d% Y")। स्ट्रैपटाइम ("% d /% m /% Y") क्या यह सही है? लेकिन मुझे एक त्रुटि मिली।
नम्मी

1
@nimmyliji: आपकी टिप्पणी पोस्ट करने से 10 मिनट पहले इसे ठीक किया गया था। और निश्चित रूप से आपके पास date_stringएक स्ट्रिंग के रूप में होना चाहिए ।
साइलेंटगॉस्ट

3
कृपया पूरी तरह से काम कर रहे उदाहरण;) क्या आयात / ... की आवश्यकता है?
कोडिंग

format1इनपुट दिनांक स्ट्रिंग के प्रारूप को व्यक्त करने के लिए एक स्ट्रिंग की आवश्यकता है। format2आउटपुट के लिए लक्ष्य स्ट्रिंग प्रारूप है।
थोरसुमोनर

1
क्या आप अधिक विस्तार से बता सकते हैं, प्रारूप 1 को इस उदाहरण में कैसे देखना चाहिए?
user1767754

59

आप डेटूटिल लाइब्रेरी स्थापित कर सकते हैं । इसका parseकार्य यह पता लगा सकता है कि आपके द्वारा किए गए प्रारूप को निर्दिष्ट करने के बिना एक स्ट्रिंग किस प्रारूप में है datetime.strptime

from dateutil.parser import parse
dt = parse('Mon Feb 15 2010')
print(dt)
# datetime.datetime(2010, 2, 15, 0, 0)
print(dt.strftime('%d/%m/%Y'))
# 15/02/2010

dateutil.parse एक बेहतर विकल्प है यदि कानूनी आईएसओ स्ट्रिंग का सटीक प्रारूप अज्ञात है। आईएसओ में माइक्रोसेकंड शामिल हो सकता है या नहीं। इसमें "Z" अनुगामी हो सकता है या नहीं हो सकता है। datetime.strptime उस के लिए व्यवस्थित करने के लिए पर्याप्त लचीला नहीं है।
माइकल कारिव

4
Pase Date का उपयोग सावधानी से किया जाना चाहिए। parse ('12 .07.2017 ') रिटर्न डेटाइम (2017, 12, 7, ..) लेकिन पार्स ('13 .07.2017') रिटर्न .datetime (2017, 7, 13, ...)
ego2dot0

में python 3.xकी जरूरत है स्थापित करने के लिएpython-dateutil pip install python-dateutil
एबी अभि

24
>>> from_date="Mon Feb 15 2010"
>>> import time                
>>> conv=time.strptime(from_date,"%a %b %d %Y")
>>> time.strftime("%d/%m/%Y",conv)
'15/02/2010'

23

स्ट्रिंग को डेटाइम ऑब्जेक्ट में बदलें

from datetime import datetime
s = "2016-03-26T09:25:55.000Z"
f = "%Y-%m-%dT%H:%M:%S.%fZ"
out = datetime.strptime(s, f)
print(out)
output:
2016-03-26 09:25:55

यह उनके द्वारा पूछे गए प्रारूप के अनुसार नहीं है, जिसमें एक महीने का स्ट्रिंग "फरवरी" था।
शहीर अंसारी

@ShahirAnsari आप प्रारूप को बदल सकते हैं जैसे आप " docs.python.org/3/library/datetime.html " का संदर्भ लें
anjaneyulubatta505

14

जैसा कि यह सवाल अक्सर आता है, यहाँ सरल स्पष्टीकरण है।

datetimeया timeमॉड्यूल के दो महत्वपूर्ण कार्य हैं।

  • strftime - डेटाइम या टाइम ऑब्जेक्ट से दिनांक या समय का एक स्ट्रिंग प्रतिनिधित्व बनाता है।
  • strptime - एक स्ट्रिंग से एक डेटाइम या टाइम ऑब्जेक्ट बनाता है।

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

अब मान लेते हैं कि हमारे पास एक दिनांक ऑब्जेक्ट है।

>>> from datetime import datetime
>>> d = datetime(2010, 2, 15)
>>> d
datetime.datetime(2010, 2, 15, 0, 0)

यदि हम प्रारूप में इस तिथि से एक स्ट्रिंग बनाना चाहते हैं 'Mon Feb 15 2010'

>>> s = d.strftime('%a %b %d %y')
>>> print s
Mon Feb 15 10

मान लें कि हम इसे sफिर से किसी datetimeऑब्जेक्ट में बदलना चाहते हैं ।

>>> new_date = datetime.strptime(s, '%a %b %d %y')
>>> print new_date
2010-02-15 00:00:00

इस दस्तावेज़ को सभी फॉर्मेटिंग निर्देशों को देखें


मुझे आपकी व्याख्या पसंद है।
ENCHANCE

2

बस पूरा करने के लिए: जब किसी तारीख का उपयोग करते हुए strptime()और तारीख में एक दिन, महीने, आदि का नाम शामिल हो, तो ध्यान रखें कि आपको लोकेल का हिसाब देना होगा।

यह डॉक्स में एक फुटनोट के रूप में भी उल्लेख किया गया है ।

उदहारण के लिए:

import locale
print(locale.getlocale())

>> ('nl_BE', 'ISO8859-1')

from datetime import datetime
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

>> ValueError: time data '6-Mar-2016' does not match format '%d-%b-%Y'

locale.setlocale(locale.LC_ALL, 'en_US')
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

>> '2016-03-06'

2

@codeling और @ user1767754: निम्नलिखित दो लाइनें काम करेंगी। मैंने देखा कि कोई भी उदाहरण समस्या के लिए पूरा समाधान पोस्ट नहीं किया गया था। उम्मीद है कि यह पर्याप्त स्पष्टीकरण है।

import datetime

x = datetime.datetime.strptime("Mon Feb 15 2010", "%a %b %d %Y").strftime("%d/%m/%Y")
print(x)

आउटपुट:

15/02/2010

1

आप पंडों का उपयोग करके इसे प्राप्त कर सकते हैं:

import pandas as pd

pd.to_datetime('Mon Feb 15 2010', format='%a %b %d %Y').strftime('%d/%m/%Y')

आउटपुट:

'15/02/2010'

आप विभिन्न डेटाटाइप्स के लिए पंडों के दृष्टिकोण को इस प्रकार लागू कर सकते हैं:

import pandas as pd
import numpy as np

def reformat_date(date_string, old_format, new_format):
    return pd.to_datetime(date_string, format=old_format, errors='ignore').strftime(new_format)

date_string = 'Mon Feb 15 2010'
date_list = ['Mon Feb 15 2010', 'Wed Feb 17 2010']
date_array = np.array(date_list)
date_series = pd.Series(date_list)

old_format = '%a %b %d %Y'
new_format = '%d/%m/%Y'

print(reformat_date(date_string, old_format, new_format))
print(reformat_date(date_list, old_format, new_format).values)
print(reformat_date(date_array, old_format, new_format).values)
print(date_series.apply(lambda x: reformat_date(x, old_format, new_format)).values)

आउटपुट:

15/02/2010
['15/02/2010' '17/02/2010']
['15/02/2010' '17/02/2010']
['15/02/2010' '17/02/2010']

0

डेटाटाइम लाइब्रेरी का उपयोग करें http://docs.python.org/library/datetime.html 9.1.7 देखें। especiall strptime () strftime () Behavior http:// उदाहरण http://pleac.sourceforge.net/pleac_python/datesandtimes.html


निम्मिलिजी के ऊपर त्रुटि के लिए आपको datetime.datetime.strptime ("Mon Feb 15 2010", "% a% b% d% Y") करना चाहिए था। strftime ("% d /% m /% Y") ' 15/02/2010 '
रोमन ए। टिचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.