Use datetime. strftime(format) to convert a datetime object into a string as per the corresponding format . The format codes are standard directives for mentioning in which format you want to represent datetime. For example, the %d-%m-%Y %H:%M:%S codes convert date to dd-mm-yyyy hh:mm:ss format.
Try each format and see if it works:
from datetime import datetime
def try_parsing_date(text):
for fmt in ('%Y-%m-%d', '%d.%m.%Y', '%d/%m/%Y'):
try:
return datetime.strptime(text, fmt)
except ValueError:
pass
raise ValueError('no valid date format found')
>>> import dateutil.parser
>>> dateutil.parser.parse(date_string)
This should take care of most of the standard date formats in Python 2.7+. If you really have super custom date formats, you can always fall back to the one mentioned by Jon Clements.
This actually a problem i was facing and this how i approached it, my main purpose was to the date seperators
class InputRequest:
"This class contain all inputs function that will be required in this program. "
def __init__(self, stockTickerName = 'YHOO', stockSite='yahoo', startDate = None,
endDate = datetime.date.today()):
def requestInput(self, requestType =''):
"Fro requesting input from user"
self.__requestInput = input(requestType)
return self.__requestInput
def dateFormat(self, dateType=''):
'''
this function handles user date input
this repeats until the correct format is supplied
dataType: this is the type of date, eg: DOF, Date of Arriveal, etc
'''
while True:
try:
dateString = InputRequest.requestInput(self,dateType)
dtFormat = ('%Y/%m/%d','%Y-%m-%d','%Y.%m.%d','%Y,%m,%d','%Y\%m\%d') #you can add extra formats needed
for i in dtFormat:
try:
return datetime.datetime.strptime(dateString, i).strftime(i)
except ValueError:
pass
except ValueError:
pass
print('\nNo valid date format found. Try again:')
print("Date must be seperated by either [/ - , . \] (eg: 2012/12/31 --> ): ")
In order to add a bit to @jon-clements already great answer,
added some verbosity on the exception raised for traceability purposes
from datetime import datetime
def try_parsing_date(possible_date, field):
"""
Try to parse a date using several formats, warn about
problematic value if the possible_date does not match
any of the formats tried
"""
for fmt in ('%Y-%m-%d', '%d/%m/%Y', '%m/%d/%Y'):
try:
return datetime.strptime(possible_date, fmt)
except ValueError:
pass
raise ValueError(f"Non-valid date format for field {field}: '{possible_date}'")
Here, possible_date
is the text that may contain a date in one of the formats, and field
would be the variable or column that you are testing. This makes it easier to find the problematic value
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With