python - 在 Python 3.6 中转换日期时间的偏移量
问题描述
在发布此之前我已经进行了足够的研究,我知道有很多类似的问题,但没有一个有可靠或统一的解决方案,而且我的情况也略有不同。
我的情况很简单。我将以下值2019-07-31 12:02:35+00:00
存储在变量中。我想把时间部分单独分开。这可以使用“strptime”来完成,我尝试了以下方法onlytime = datetime.datetime.strptime(str(dateandtime), "%Y-%m-%d %H:%M:%S%z")
但显示以下错误
“ValueError:时间数据'2019-07-31 12:02:35+00:00'与格式'%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)
更新:当我单独执行日期时间部分时,相同的程序正在在线编译器中工作。因此,我添加了有关输入 JSON 的更多详细信息:这是存储在变量中的 JSONdetails
{
'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
. 我不确定这些细节是否意味着什么,但是。
解决方案
在 3.7 版更改: 当 %z 指令提供给 strptime() 方法时,UTC 偏移量可以有一个冒号作为小时、分钟和秒之间的分隔符。例如,“+01:00:00”将被解析为一小时的偏移量。此外,提供“Z”与“+00:00”相同。
好像python 3.6只支持+0000,没有冒号
https://docs.python.org/3.7/library/datetime.html#strftime-and-strptime-behavior
这个怎么样:
import datetime
import re
regex = r"([+-])([0-9]{2}):([0-9]{2})"
subst = "\\1\\2\\3"
dateandtime = "2019-07-31 12:02:35+00:00"
dateandtime = re.sub(regex, subst, dateandtime, 0)
print(dateandtime)
onlytime = datetime.datetime.strptime(str(dateandtime),"%Y-%m-%d %H:%M:%S%z")
print(onlytime)
推荐阅读
- regex - Spark:返回每个数据集行的所有正则表达式匹配
- javascript - 获取多个复选框的值并将它们插入 MySQL
- python - 使用 csv.reader() 加载和访问数据时获取 AttributeError
- vue.js - 绘制/修改时的 openlayers 错误(在 vuejs 中)
- javascript - 查找 url 是否包含 href 中 url 的特定部分并获取完整链接或替换为另一个
- r - fisher.test() 中的错误:FEXACT 错误 40。超出工作区
- swift - 如何在活动控制器中使用 web url 图像在 swift 中共享图像
- odoo - 通过 odoo 9 中的 onchange 设置 one2many 值
- ios - 未调用 SFAuthenticationSession 完成处理程序
- amazon-ec2 - 将 EC2 Cassandra 节点添加到我已经运行的前提 Apache Cassandra 集群