Python 中的日期时间库为 YYYY-MM-DD 提供了不正确的格式,导致嵌入 API 调用后出错

Datetime library in Python giving incorrect format for YYYY-MM-DD resulting in error after embedding in API call

我是 python 的新手,正在尝试使用 Sendgrid api 和日期时间库:

要尝试提取电子邮件统计信息,我的代码是:

import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")

payload = "{}"

headers = { 'authorization': "Bearer SG.***" }

conn.request("GET", "/v3/stats?aggregated_by=day&start_date=2020-01-14", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

此代码有效,我收到了我想要的输出,但是,我想创建此应用程序,使其每天通过任务计划程序运行并生成报告,而无需 nme 手动更改开始日期。

我试过了:

from datetime import date
today = date.today()

如果我打印(今天)它会给我确切的格式 20120-01-14 但如果我今天直接打电话它说

today
Out[37]: datetime.date(2020, 1, 14)

下面我尝试将 "today" 作为我的开始日期,但出现格式错误

import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")

payload = "{}"

headers = { 'authorization': "Bearer SG.***" }

conn.request("GET", "/v3/stats?aggregated_by=day&start_date=today", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

但是,这给了我一个错误:{"errors":[{"message":"start_date is required and should be a YYYY-MM-DD formatted date"}]}

我该怎么做才能在 start_date 中输入当前日期,而无需我手动更改它?

试试这个:

date.today().strftime('%Y-%m-%d')

并将此行更改为:

conn.request("GET", "/v3/stats?aggregated_by=day&start_date=today", payload, headers)

对此:

conn.request("GET", "/v3/stats?aggregated_by=day&start_date={}".format(today), payload, headers)

并查看 python built-in date functions

改变

"/v3/stats?aggregated_by=day&start_date=today"

f"/v3/stats?aggregated_by=day&start_date={str(today)}"

或者如果您使用的是 3.6

之前的 Python
"/v3/stats?aggregated_by=day&start_date={}".format(str(today))

这是

'2020-01-14'

它会起作用的!