Dateutil का उपयोग करने में समस्या यह है कि आपके पास क्रमांकन और deserialization दोनों के लिए समान प्रारूप स्ट्रिंग नहीं हो सकता है, क्योंकि dateutil में सीमित स्वरूपण विकल्प (केवल dayfirst
और केवल yearfirst
) हैं।
अपने आवेदन में, मैं। स्ट्रिंग फ़ाइल में प्रारूप स्ट्रिंग संग्रहीत करता हूं, और प्रत्येक परिनियोजन का अपना प्रारूप हो सकता है। इस प्रकार, मुझे वास्तव में डेटुटिल दृष्टिकोण पसंद नहीं है।
यहाँ एक वैकल्पिक विधि है जो इसके बजाय pytz का उपयोग करती है:
from datetime import datetime, timedelta
from pytz import timezone, utc
from pytz.tzinfo import StaticTzInfo
class OffsetTime(StaticTzInfo):
def __init__(self, offset):
"""A dumb timezone based on offset such as +0530, -0600, etc.
"""
hours = int(offset[:3])
minutes = int(offset[0] + offset[3:])
self._utcoffset = timedelta(hours=hours, minutes=minutes)
def load_datetime(value, format):
if format.endswith('%z'):
format = format[:-2]
offset = value[-5:]
value = value[:-5]
return OffsetTime(offset).localize(datetime.strptime(value, format))
return datetime.strptime(value, format)
def dump_datetime(value, format):
return value.strftime(format)
value = '2009/05/13 19:19:30 -0400'
format = '%Y/%m/%d %H:%M:%S %z'
assert dump_datetime(load_datetime(value, format), format) == value
assert datetime(2009, 5, 13, 23, 19, 30, tzinfo=utc) \
.astimezone(timezone('US/Eastern')) == load_datetime(value, format)
dateutil
2.1) पायथन के साथ ठीक काम करता है2.7.2
; अजगर 3 की आवश्यकता नहीं है। ध्यान दें कि यदि आप पाइप से स्थापित कर रहे हैं, तो पैकेज का नाम हैpython-dateutil
।