博客园  :: 首页  :: 管理

最近笔者在使用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