我从一个网站上获得这样的日期:Sun Jan 22 21:32:58 +0000 2012
。我了解我必须摆脱+0000
才能将其转换为日期,但是我该怎么做呢?我阅读了文档,但是我的代码不起作用:
from datetime import datetime
strDate = 'Mon Apr 29 14:30:53 2019'
objDate = datetime.strptime(strDate, '%a %b %H %M %S %Y')
我遇到错误:
ValueError: time data 'Mon Apr 29 14:30:53 2019' does not match format '%d %m %H %M %S %Y'
我真的不明白为什么。还是有人知道如何从Sun Jan 22 21:32:58 +0000 2012
获取日期?
答案 0 :(得分:1)
如果您的对象是datetime.datetime
,则只需执行date()
from datetime import datetime
datetime1 = datetime.now()
date1 = datetime1.date()
答案 1 :(得分:1)
恐怕 seralouk 目前接受的答案是不正确的。使用 "+%f" 将数字转换为几分之一秒。 0000 没问题,但如果它们碰巧是别的东西,就会把事情搞砸。
这是因为“+0000”部分是时区偏移量,正确的解析方法是使用“%z”指令,该指令也将处理“+”号,因此将其从格式字符串:
>>> date_string = "Sun Jan 22 21:32:58 +0000 2012"
>>> datetime.strptime(date_string, "%a %b %d %H:%M:%S %z %Y")
datetime.datetime(2012, 1, 22, 21, 32, 58, tzinfo=datetime.timezone.utc)
答案 2 :(得分:0)
strDate ='Sun Jan 22 21:32:58 +0000 2012'
objDate = datetime.strptime(strDate, '%a %b %d %H:%M:%S +%f %Y')
print(objDate)
#2019-04-29 14:30:53
详细信息:
您只是忘了使用%d
来捕获日期数字和:
的时间,并且还需要捕获+0000
。
证明:
答案 3 :(得分:0)
您可以像这样摆脱“ +0000”:
from datetime import datetime
strDate ='Sun Jan 22 21:32:58 +0000 2012'
objDate = datetime.strptime(strDate.replace(strDate.split(" ")[4] + " ", ""), '%a %b %d %H:%M:%S %Y')
print(objDate)
-> 2012-01-22 21:32:58
顺便说一句
1。。您发布的代码示例并非所要解决的问题! (它不包含字符串中的+0000)。
2。。您共享的错误(错误的日期格式,已经得到答案并在f.ex. here中进行了描述)是另一种代码,而不是您自己的代码目前以上! (错误抛出'%d%m%H%M%S%Y'而不是'%a%b%H%M%S%Y')。
答案 4 :(得分:-1)
您缺少冒号:
和日期格式字符串%d
。有关显示不同格式值的表格,请参见strptime
的官方documentation。
from datetime import datetime
strDate = 'Mon Apr 29 14:30:53 2019'
objDate = datetime.strptime(strDate, '%a %b %d %H:%M:%S %Y')
答案 5 :(得分:-1)
在您的字符串中,您缺少%d以赶上每月的01-31
'%a %b %d %H:%M:%S %Y'
如果您还想捕获+0000,则必须使用%z表示法
将此作为参考以正确构建您的字符串: http://strftime.org/