gpt4 book ai didi

python - 比较两个 Python 3 日期时间对象返回 "can' t 比较原始偏移和偏移感知日期时间 : TypeError"

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:11 27 4
gpt4 key购买 nike

我正在尝试将类型为 datetime 的 AWS EC2 实例对象的时间与表示为 datetime.datetime.now 的另一个日期时间进行比较。有问题的代码行看起来像,

if launchTime < datetime.datetime.now()-datetime.timedelta(seconds=20):

其中 launchTime 是 datetime 类型。但是当我运行它时,我得到了错误

can't compare offset-naive and offset-aware datetimes: TypeError

而且我不确定如何以可以成功比较它的方式转换 launchTime。

编辑了下面的固定代码 ------------------------------------------

if launchTime.replace(tzinfo=None) < datetime.datetime.now()-datetime.timedelta(minutes=4):

完整代码,以防将来有人发现它有值(value)。 Python 3 停止运行了“x”时间的 EC2 实例。在这种情况下,如果一个实例运行了五分钟。终止它。 lambda 本身也使用 Cloudwatch 设置为每 4 分钟运行一次。

import boto3
import time
import datetime

#for returning data about our newly created instance later on in fuction
client = boto3.client('ec2')

def lambda_handler(event, context):

response = client.describe_instances()
#for each instance currently running/terminated/stopped
for r in response['Reservations']:
for i in r['Instances']:
#if its running then we want to see if its been running for more then 3 hours. If it has then we stop it.
if i["State"]["Name"] == "running":
launchTime = i["LaunchTime"]

#can change minutes=4 to anything
if launchTime.replace(tzinfo=None) < datetime.datetime.now()-datetime.timedelta(minutes=4):
response = client.stop_instances(
InstanceIds=[
i["InstanceId"]
]
)

最佳答案

主要问题是我假设 launchTime是时区感知的,而 datetime.now()不是 ( datetime.now().tzinfo == None )。

有几种方法可以解决这个问题,但最简单的方法是从 launchTime 中删除 tzinfo。 : if launchTime.replace(tzinfo=None) < datetime.datetime.now()-datetime.timedelta(seconds=20)应该可以解决问题。

或者,您可以将日期时间对象转换为 Unix 时间戳,这样就不必处理时区问题。

关于python - 比较两个 Python 3 日期时间对象返回 "can' t 比较原始偏移和偏移感知日期时间 : TypeError",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50265555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com