How to format date string via multiple formats in python

I have three date formats: YYYY-MM-DD, DD.MM.YYYY, DD/MM/YYYY.

Is it possible to validate and parse strings such as 2014-05-18 or 18.5.2014 or 18/05/2019?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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')

Method 2

>>> 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.

Method 3

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 --> ): ")

Method 4

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

Method 5

Pure python:

from datetime import datetime
my_datetime = datetime.strptime('2014-05-18', '%Y-%m-%d') 
repr(my_datetime)

>>> 'datetime.datetime(2014,5,18,0,0)'

Check datetime.strptime() format documentation for more format strings.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x