将完整字符串类型时间转换为datetime类型 - Python

1 投票
1 回答
1802 浏览
提问于 2025-04-18 07:05

我有一个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

我已经看过这些讨论帖了。

将字符串转换为日期时间

将字符串转换为日期类型(Python)

在Python中将字符串转换为日期类型

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)

撰写回答