Python 3.4 strptime() not working
Question: I am trying to convert a string to datetime and it isn't working...

    
    
    self.loadsList[loadID][5] = datetime.strptime(
    self.loadsList[loadID][5]+" "+self.loadsList[loadID][6], "%x %X %z")
    

and it raises a Value Error.

    
    
    ValueError: time data '11/08/2014 04:00:00 -0500' does not match format '%x %X %z'
    

What am I doing wrong? Thanks! (Python 3.4)


Answer: The default `%x` format is the equivalent of `%d/%m/%y`, where `%y` matches a
_two digit year_ :

    
    
    >>> import locale
    >>> locale.nl_langinfo(locale.D_FMT)
    '%m/%d/%y'
    

Your input uses a 4 digit year instead:

    
    
    >>> from datetime import datetime
    >>> datetime.strptime('11/08/2014', '%x')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
        tt, fraction = _strptime(data_string, format)
      File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 340, in _strptime
        data_string[found.end():])
    ValueError: unconverted data remains: 14
    

I'd not use `%x` or `%X`, just spell out the date and time formats; based on
your input and the use of `%x` that'd be:

    
    
    '%m/%d/%Y %H:%M:%S %z'
    

Demo:

    
    
    >>> datetime.strptime('11/08/2014 04:00:00 -0500', '%m/%d/%Y %H:%M:%S %z')
    datetime.datetime(2014, 11, 8, 4, 0, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))
    

It is not clear if your input represents the 8th day of November or the 11th
day of August; your use of `%x` suggests the former but I suspect you should
instead interpret the value the other way around:

    
    
    '%d/%m/%Y %H:%M:%S %z'
    

The alternative would be to switch your Python locale from the default `C` to
`en_US` where the year _would_ use 4 digits.

