最近笔者在使用Lambda函数时,遇到一个小问题,排查了些时间,才找到原因,
先说根本原因,那就是关于Lambda 函数代码中的日期和时间,都是取的UTC时间,并不是中国时间
这个可以说是一个坑点、也可以说成一个注意事项,大家在写代码时应该需要注意,先说一下笔者的遇到的问题过程
1、函数的部分代码如下,笔者首页是取出当前日期时间值,然后也设置了一个删除日期的变量为当前时间+1天
import json import datetime def lambda_handler(event, context): # TODO implement now=datetime.datetime.now() deletedate=(now+datetime.timedelta(days=1)).strftime("%Y-%m-%d")
这个代码的每天凌晨的00:00执行,笔者通过EventBridge (CloudWatch Events)创建的策略,关于计划日期也是UTC格式的,这点笔者倒时注意到了,如下
Schedule expression: cron(0 16 ? * * *)
举例说明,如2023-03-02凌晨00:00时,执行时,deletedate的结果还是2023-03-02(与预期的结果不同)
最后又分析代码加上调试才找到原因,因为根据计划任务,确实会在2023-03-02凌晨00:00时执行,但当时的UTC时间将是2023-03-01 16:00:00
这样,deletedate将是在2023-03-01 16:00:00的基础上+1天,计算时,结果将是2023-03-02 16:00:00,按日期格式化结果就是 2023-03-02
解决方法>>>>:
1、在计算日期时间时,应该对datetime再加上8小时,换算成中国时区的时间,那么对于面的deletedate就应该加上32小时
尊重别人的劳动成果 转载请务必注明出处: https://www.cnblogs.com/5201351/p/17233834.html
标签:Function,UTC,00,03,Python,02,datetime,2023 From: https://www.cnblogs.com/5201351/p/17233834.html