【发布时间】:2017-11-02 15:59:45
【问题描述】:
我已从 bigquery 记录中检索到日期时间(使用 google.cloud.bigquery 库),需要根据 @987654322 的“startTime”参数以 rfc 3339 格式将其发送到 google admin sdk 报告 API @。 API 期望日期时间如下所示:
2010-10-28T10:26:35.000Z
这通常可以通过创建不带 tzinfo 的 python 日期时间并像这样调用 isoformat 来实现:
>>> now = datetime.utcnow()
>>> now = now.isoformat("T") + "Z"
>>> now
'2017-06-01T13:05:32.586760Z'
我遇到的问题是来自 BigQuery 的时间戳包含一个 tzinfo 对象,这导致 isoformat 返回 Google API 无法处理的文本。
>>> timestamp_from_bigquery
'datetime.datetime(2017, 5, 31, 16, 13, 26, 252000, tzinfo=<UTC>)'
>>> timestamp_from_bigquery.isoformat("T") + "Z"
'2017-05-31T16:13:26.252000+00:00Z'
具体来说,Google 的 API 不接受 +00:00 作为 startTime。如果我从字符串中手动删除 +00:00,API 调用就可以工作,但我不确定如何在没有丑陋字符串 hack 的情况下在 python 中执行此操作。是否有一些干净的方法可以从日期时间对象中删除它?
我也试过这个,但结果是一样的:
>>> timestamp_from_bigquery.replace(tzinfo=None)
'2017-05-31T16:13:26.252000+00:00Z'
【问题讨论】:
-
一种可能性是将
strftime与格式字符串一起使用:datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
标签: python google-api google-bigquery google-admin-sdk