Parse date string and change format

后端 未结 9 663
孤街浪徒
孤街浪徒 2020-11-22 00:58

I have a date string with the format \'Mon Feb 15 2010\'. I want to change the format to \'15/02/2010\'. How can I do this?

相关标签:
9条回答
  • 2020-11-22 01:38

    datetime module could help you with that:

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

    For the specific example you could do

    >>> datetime.datetime.strptime('Mon Feb 15 2010', '%a %b %d %Y').strftime('%d/%m/%Y')
    '15/02/2010'
    >>>
    
    0 讨论(0)
  • 2020-11-22 01:38

    convert string to datetime object

    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
    
    0 讨论(0)
  • 2020-11-22 01:43

    As this question comes often, here is the simple explanation.

    datetime or time module has two important functions.

    • strftime - creates a string representation of date or time from a datetime or time object.
    • strptime - creates a datetime or time object from a string.

    In both cases, we need a formating string. It is the representation that tells how the date or time is formatted in your string.

    Now lets assume we have a date object.

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

    If we want to create a string from this date in the format 'Mon Feb 15 2010'

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

    Lets assume we want to convert this s again to a datetime object.

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

    Refer This document all formatting directives regarding datetime.

    0 讨论(0)
  • 2020-11-22 01:48

    You can install the dateutil library. Its parse function can figure out what format a string is in without having to specify the format like you do with 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
    
    0 讨论(0)
  • 2020-11-22 01:51

    You may achieve this using pandas as well:

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

    Output:

    '15/02/2010'
    

    You may apply pandas approach for different datatypes as:

    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)
    

    Output:

    15/02/2010
    ['15/02/2010' '17/02/2010']
    ['15/02/2010' '17/02/2010']
    ['15/02/2010' '17/02/2010']
    
    0 讨论(0)
  • 2020-11-22 01:58

    Just for the sake of completion: when parsing a date using strptime() and the date contains the name of a day, month, etc, be aware that you have to account for the locale.

    It's mentioned as a footnote in the docs as well.

    As an example:

    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'
    
    0 讨论(0)
提交回复
热议问题