gpt4 book ai didi

python - 将 Airflow 宏 'ts' 转换为日期时间对象

转载 作者:行者123 更新时间:2023-12-04 12:25:13 26 4
gpt4 key购买 nike

我在将 Airflow 宏引用“ts”转换为日期时间对象时遇到了问题。问题在于字符串末尾的 tz。

from datetime import datetime
timetoday = kwargs['ts']
t = datetime.strptime(timetoday, '%Y-%m-%dT%H:%M:%S%z')

代码没有成功执行,而是抛出了一条错误消息:
time data '2019-08-24T00:00:00+00:00' does not match format '%Y-%m-%dT%H:%M:%S%z'

如果我使用格式略有不同的相同代码,并尝试使用 'ds' 宏,我设法将字符串转换为 datetime 对象。

from datetime import datetime
timetoday = kwargs['ds']
t = datetime.strptime(timetoday, '%Y-%m-%d')

更新:阅读来自 http://strftime.org/ 的笔记并了解 %z是格式为 的 UTC 偏移量+HHMM -HHMM (如果对象是幼稚的,则为空字符串)。这让我想知道是否附加 ':'中间 +00:00 (返回的字符串 kwargs['ts'] 是错误的根本原因。但是,我仍然不确定如何正确解析它,因为 strptime 中没有其他选项。

因此,我将宏更改为 kwargs['ts_nodash']这不会返回时区,现在继续我的代码。如果有人知道怎么做,我仍然有兴趣了解如何正确完成!谢谢!

timetoday = kwargs['ts_nodash']
t = datetime.strptime(timetoday, '%Y%m%dT%H%M%S')

最佳答案

看着macros reference然后是您的用例,我建议您使用 execution_date宏而不是 ts

{{ ts }}            : same as execution_date.isoformat(). Example: 2018-01-01T00:00:00+00:00

{{ execution_date }}: the execution_date (pendulum.Pendulum)


如果你同意,这一切都归结为转换 execution_date这是一个 pendulum object进入 Python datetime对象,就像 datetime.fromtimestamp(execution_date.timestamp()) 一样简单

Python 片段(转换)演示:
import pendulum
from pendulum import Pendulum
from datetime import datetime
..
execution_date: Pendulum = pendulum.now()
execution_date_as_datetime: datetime = datetime.fromtimestamp(execution_date.timestamp())

引用
  • execution_date jinja resolving as a string
  • How to convert pendulum to datetime.datetime type?
  • 关于python - 将 Airflow 宏 'ts' 转换为日期时间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57666476/

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