在发布这篇文章之前,我已经做了足够的研究,我知道有很多类似的问题,但没有一个问题有一个可靠的或统一的解决方案,而且我的情况略有不同。你知道吗
我的案子很简单。我将以下值2019-07-31 12:02:35+00:00
存储在变量中。我想把时间一个人分出来。这可以通过使用“strtime”来完成,我尝试了以下方法onlytime = datetime.datetime.strptime(str(dateandtime), "%Y-%m-%d %H:%M:%S%z")
,但是显示时出现了以下错误
"ValueError: time data '2019-07-31 12:02:35+00:00' does not match format '%Y-%m-%d %H:%M:%S%%z'"
%z
应该使用pyhton 3.2和更高版本,这样就不会有问题了。我也尝试了date-utils(),但是文档很混乱,我在这里找不到正确使用它们的方法。那么在这里可以做些什么来实现我的用例呢?下面是我的全部代码:
#!/usr/bin/env python3
import boto3
from datetime import date, datetime, timedelta
import datetime
inputdata = boto3.client('s3')
details = inputdata.list_objects_v2(Bucket='testbucket')
for timedetails in details['Contents']:
dateandtime = timedetails['LastModified']
onlytime = datetime.datetime.strptime(str(dateandtime), "%Y-%m-%d %H:%M:%S%z")
print (onlytime)
更新:当我单独执行datetime部分时,同一个程序在联机编译器中工作。因此,我添加了关于输入JSON的更多细节:这是存储在变量details
中的JSON
{
'Contents': [{
u 'LastModified': datetime.datetime(2019, 7, 31, 12, 2, 35, tzinfo = tzlocal()),
u 'ETag': '"1a8f23054d922eff88a644bd003e6397"',
u 'StorageClass': 'STANDARD',
u 'Key': u 'EVNET- task & window.docx',
u 'Size': 783570
}
}
但是,当我打印存储在dateandtime
中的值时,它显示为2019-07-31 12:02:35+00:00
。我不确定这些细节是否意味着什么,但是。你知道吗
问题是UTC偏移量。RFC3339 Internet日期/时间格式要求每个日期时间都包含一个UTC偏移量,并且这些偏移量可以是Z(Zulu时间的缩写)或+HH:MM或-HH:MM格式,如+05:00或-10:30。你知道吗
因此,这些都是有效的RFC 3339日期时间:
唉,strtime和strftime使用的格式字符串没有与rfc3339格式的UTC偏移量对应的指令。您需要使用第三方库或不带偏移量的解析。你知道吗
Helpful link
在版本3.7中更改:当向strtime()方法提供%z指令时,UTC偏移量可以有冒号作为小时、分钟和秒之间的分隔符。例如,“+01:00:00”将被解析为一小时的偏移量。此外,提供“Z”与“+00:00”相同。你知道吗
python3.6似乎只支持+0000,没有冒号
https://docs.python.org/3.7/library/datetime.html#strftime-and-strptime-behavior
这个怎么样:
相关问题 更多 >
编程相关推荐