将完整字符串类型时间转换为datetime类型 - Python
我有一个unicode字符串 u'May 12, 2014 8:00:40 PM'
,我想把它转换成一个日期时间对象,但我只想要日期,不需要时间戳。
输出应该是 2014/5/12
或者 2014/05/12
。
我尝试过使用strptime,但没有成功。可能是我漏掉了什么?
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
326 if len(data_string) != found.end():
327 raise ValueError("unconverted data remains: %s" %
--> 328 data_string[found.end():])
329
330 year = None
ValueError: unconverted data remains: 1:33PM
我已经看过这些讨论帖了。
1 个回答
1
datetime.datetime.strptime()
这个函数需要解析输入字符串的 所有 内容。如果你传入 u'May 12, 2014 8:00:40 PM'
这样的字符串,你就得处理里面的所有字符。
你可以选择把时间部分分开,或者把时间部分也解析出来,然后通过调用 .date()
方法来忽略那部分,得到一个只包含日期的对象。
其实直接包含时间部分会更简单:
dateobj = datetime.datetime.strptime(inputstring, '%B %d, %Y %I:%M:%S %p').date()
这样你就能得到一个 datetime.date()
对象,它只包含字符串中的日期部分。
如果你想去掉时间部分,可以用 str.rsplit()
方法,限制为分割两次:
dateobj = datetime.datetime.strptime(inputstring.rsplit(None, 2)[0], '%B %d, %Y').date()
我在这里也调用了 .date()
方法。
示例:
>>> import datetime
>>> inputstring = u'May 12, 2014 8:00:40 PM'
>>> datetime.datetime.strptime(inputstring, '%B %d, %Y %I:%M:%S %p').date()
datetime.date(2014, 5, 12)
>>> datetime.datetime.strptime(inputstring.rsplit(None, 2)[0], '%B %d, %Y').date()
datetime.date(2014, 5, 12)