【问题标题】:get the data for the previous day in Python在 Python 中获取前一天的数据
【发布时间】:2021-09-03 07:53:04
【问题描述】:

我对@9​​87654321@ 非常陌生,需要从RESTAPI 提取前一天的数据,在我的RESTAPI 请求中我需要提供QueryStartDateQueryEndDate。直到现在为了测试,我手动提供前一天的日期(sysdate-1)。但现在我想自动化这个过程,我想应用 Python 函数来总是获取前一天的日期,这样我就可以从前一天提取全天数据。

我使用的是 UTC 时区,所以我需要保留这部分 T12:00:00.000Z,否则我对 RESTAPI 的请求将无法运行。所以我只需要更改日期部分。

"QueryStartDate": "2021-09-02T12:00:00.000Z"
"QueryEndDate": "2021-09-02T12:10:00.000Z"

我尝试应用 datetime.now() - timedelta(1) 函数来获取前一天的日期,但由于语法问题不确定 RESTAPI 请求引发错误。

【问题讨论】:

  • 您的意思是,如果今天是 2021 年 9 月 3 日,您想要字符串 "2021-09-02T00:00:00.000+0000""2021-09-02T23:59:59.999+0000"?还是总是固定为T12:00:00.000ZT12:10:00.000Z
  • 是的,正确的问题出在双引号中,我们也必须小心……我需要上一个日期“2021-09-02T23:59:59.999+0000”……不是修复了 T12:00:00.000Z 和 T12:10:00.000Z 因为在 querystartdate 我们需要从 00 开始并且 queryenddate 它应该是 24 以便我可以从前一个日期获取全天数据
  • 好的,明白了。我添加了一个答案,你能检查它是否满足你的需要吗?
  • 是的,我正在测试它,谢谢

标签: python datetime python-3.7


【解决方案1】:

如果需要前一天的字符串值,格式为:

  • 格式1:"2021-09-02T00:00:00.000000+0000"
  • 格式2:"2021-09-02T00:00:00.000000Z"

从开始时间00:00:00.000000到结束时间23:59:59.999999,您可以使用datetime.strftime()time.mintime.max一起使用:

from datetime import datetime, time, timedelta, timezone

yesterday_dt = datetime.now(timezone.utc) - timedelta(days=1)
yesterday_start_dt = datetime.combine(yesterday_dt, time.min, tzinfo=timezone.utc)
yesterday_end_dt = datetime.combine(yesterday_dt, time.max, tzinfo=timezone.utc)

format1 = "%Y-%m-%dT%H:%M:%S.%f%z"
format2 = "%Y-%m-%dT%H:%M:%S.%fZ"

queryStartDate_format1 = yesterday_start_dt.strftime(format1)
queryEndDate_format1 = yesterday_end_dt.strftime(format1)
print("Format 1:")
print(queryStartDate_format1)
print(queryEndDate_format1)

queryStartDate_format2 = yesterday_start_dt.strftime(format2)
queryEndDate_format2 = yesterday_end_dt.strftime(format2)
print("Format 2:")
print(queryStartDate_format2)
print(queryEndDate_format2)

输出

Format 1:
2021-09-02T00:00:00.000000+0000
2021-09-02T23:59:59.999999+0000
Format 2:
2021-09-02T00:00:00.000000Z
2021-09-02T23:59:59.999999Z

更新

如果导入是基于根datetime,这是一个版本。

import datetime

yesterday_dt = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=1)
yesterday_start_dt = datetime.datetime.combine(yesterday_dt, datetime.time.min, tzinfo=datetime.timezone.utc)
yesterday_end_dt = datetime.datetime.combine(yesterday_dt, datetime.time.max, tzinfo=datetime.timezone.utc)

format1 = "%Y-%m-%dT%H:%M:%S.%f%z"
format2 = "%Y-%m-%dT%H:%M:%S.%fZ"

queryStartDate_format1 = yesterday_start_dt.strftime(format1)
queryEndDate_format1 = yesterday_end_dt.strftime(format1)
print("Format 1:")
print(queryStartDate_format1)
print(queryEndDate_format1)

queryStartDate_format2 = yesterday_start_dt.strftime(format2)
queryEndDate_format2 = yesterday_end_dt.strftime(format2)
print("Format 2:")
print(queryStartDate_format2)
print(queryEndDate_format2)

【讨论】:

  • 我收到错误 AttributeError: module 'datetime' has no attribute 'now'
  • 我想你的导入只是import datetime。尝试将其更改为from datetime import datetime
  • 是的,我从 datetime 导入日期时间、时间、时间增量、时区做了同样的事情,现在出现错误 AttributeError: type object 'datetime.datetime' has no attribute 'timezone'......实际上以前在我的代码中,我也有 t = datetime.datetime.now()
  • 它实际上在答案中。只需使用整个导入from datetime import datetime, time, timedelta, timezone
  • 检查 API 端。我尝试了您粘贴的确切代码并且它有效。请参阅paiza.io/projects/e/lFvPWOJi-m2davHaVrRulw?theme=twilight,如您所见,今天是 2021-09-17,在打印中您会正确看到 {'QueryStartDate': '2021-09-16T07:00:00.000000Z', 'QueryEndDate': '2021-09-16T23:00:00.000000Z'}
【解决方案2】:

使用这行代码可能会帮助您找到前一天

import datetime
Previous_Date = datetime.datetime.today() - datetime.timedelta(days=1)
print (Previous_Date)

如果您使用 UTC 时区,请尝试:

from datetime import datetime, timedelta, timezone
todayUTC = datetime.now(timezone.utc).date()
yesterdayUTC = today - timedelta(1)
print(todayUTC, yesterdayUTC)

【讨论】:

  • 但我使用的是 UTC 时区,这部分非常重要 T12:00:00.000Z 否则我对 REST API 的请求将不会运行......我已经相应地更新了我的问题..
  • 对不起,请告诉我如何在 Querystartdate 和 Queryenddate 中使用它?
  • 把今天UTC变量作为Querystartdate,把昨天UTC变量作为Queryenddate。
  • 双引号呢?
  • 你存储的字符串是正确的,所以很简单。 todayUTC 和 yestardayUTC 都是字符串类型。不用担心这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多