पायथन डेट स्ट्रिंग टू डेट ऑब्जेक्ट


345

मैं अजगर में डेट ऑब्जेक्ट के लिए एक स्ट्रिंग कैसे परिवर्तित करूं?

स्ट्रिंग होगी: "24052010"(प्रारूप के अनुसार "%d%m%Y") :

मुझे एक datetime.datetime वस्तु नहीं चाहिए, बल्कि एक datetime.date।

जवाबों:


586

आप पायथन strptimeके datetimeपैकेज में उपयोग कर सकते हैं :

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)

मैं इसी तरह की प्रक्रिया का प्रयास कर रहा हूं सिवाय मेरे इनपुट स्ट्रिंग के वर्ष नहीं है, इसलिए यह '2405' जैसा दिखता है। डिफ़ॉल्ट रूप से, वर्ष के रूप में लिया जाता है 1900। समस्या तब होती है जब फरवरी की तारीख '2902' को पार्स करते हैं। मुझे यह त्रुटि मिलती है ValueError: day is out of range for month। सुनिश्चित नहीं है कि मैं पार्स करते समय डिफ़ॉल्ट वर्ष कैसे सेट कर सकता हूं।
शुभम नाइक


59

सीधे संबंधित प्रश्न:

अगर आपके पास है

datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()

और आपको मिलता है:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
    format_regex = _TimeRE_cache.compile(format)
  File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
    return re_compile(self.pattern(format), IGNORECASE)
  File "/usr/local/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.7/re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4

और आपने कोशिश की:

<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()

लेकिन आप अभी भी ऊपर ट्रेसबैक प्राप्त करते हैं।

उत्तर:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))

1
2015-07-20 09: 46: 55 + 00: 00 मेरे पास इस तरह का डेटा है, मुझे दिनांक ऑब्जेक्ट कैसे मिलेगा?
हार्दिक गज्जर

"2015-07-20 09: 46: 55 + 00: 00" से "2015-07-20T09: 46: 55-00: 00" अपने डेटा को बदलने के लिए पुनः (नियमित अभिव्यक्ति) मॉड्यूल का उपयोग करें। फिर डेट ऑब्जेक्ट प्राप्त करने के लिए dateutil.parse का उपयोग करें।
शोपेनहावर

1
धन्यवाद, वास्तव में समस्या तानाशाही प्रकार की वस्तु थी और मैं केवल हुक्म का उपयोग करके समाधान प्राप्त करता हूं। प्रयोग करके देखें
हार्दिक गज्जर

2
एक अन्य विचार यह है कि मैन्युअल docs.python.org/3/library/… को पढ़ें और ध्यान दें कि% B का अर्थ है "लोकल के पूर्ण नाम के रूप में महीना"। जो "जनवरी" या "दिसंबर" जैसा है, इसलिए "02" पार्स नहीं होगा।
फ्लिप करें

1
इसमें दिनांक स्वरूप स्ट्रिंग गलत है, यह एक% m होना चाहिए एक% B नहीं है
theannouncer

24

यदि आप आलसी हैं और स्ट्रिंग शाब्दिकों से नहीं लड़ना चाहते हैं, तो आप बस parserमॉड्यूल के साथ जा सकते हैं ।

from dateutil import parser
dt = parser.parse("Jun 1 2005  1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0

बस एक साइड नोट , जैसा कि हम anyस्ट्रिंग प्रतिनिधित्व का मिलान करने की कोशिश कर रहे हैं , यह 10x की तुलना में धीमा हैstrptime


बहुत ही सरल समाधान, धन्यवाद। मैं एक एक्सेल लंबी समय है कि के रूप में प्रदर्शित किया जा रहा था परिवर्तित करने के लिए कोशिश कर रहा थाMonday, June 03, 2019
जेफ Bluemel

5

आपके पास दिनांक स्ट्रिंग है, "24052010" और आप इसके लिए दिनांक ऑब्जेक्ट चाहते हैं,

from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()

यह cus_date आपको दिनांक ऑब्जेक्ट देगा।

आप इसका उपयोग करके अपनी दिनांक ऑब्जेक्ट से दिनांक स्ट्रिंग प्राप्त कर सकते हैं,

cus_date.strftime("%d%m%Y")

3

एक और पुस्तकालय है जिसे arrowअजगर की तारीख में हेरफेर करने के लिए वास्तव में महान कहा जाता है ।

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

1

डेटा परिवर्तित करने के लिए समय मॉड्यूल का उपयोग करें।

सांकेतिक टुकड़ा:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.