如何在Python中将日期值映射到时间戳范围?
我是以日期范围作为有效载荷的一部分的。使用指示范围开始和结束的2个datetime参数指定范围:如何在Python中将日期值映射到时间戳范围?,python,python-3.x,date,date-range,Python,Python 3.x,Date,Date Range,我是以日期范围作为有效载荷的一部分的。使用指示范围开始和结束的2个datetime参数指定范围: |名称|类型|描述|格式|必填项| |-------+--------+------------------------------------------------------------+---------------------+-------------| |因为| string |您要搜索的日期范围的开始格式:“日期时间”|可选| | | |
|名称|类型|描述|格式|必填项|
|-------+--------+------------------------------------------------------------+---------------------+-------------|
|因为| string |您要搜索的日期范围的开始格式:“日期时间”|可选|
| | | | | |
|直到| string |要搜索的日期范围的末尾。|格式:“日期时间”|可选|
调用此API时,我希望使用一周的固定子间隔:自
至周五晚上8点,以及至
至周一上午8点。我目前正在使用以下特定日期范围对其进行测试:
payload = {
'since': '2020-03-27T20:00-05',
'until': '2019-03-30T08:00-05'
}
在我的脚本中,我希望给出一个日期作为输入,并将该日期映射到一个有效负载,该有效负载为该间隔的最新时间实例指定
自
和至
。我不知道该怎么做,你能帮我吗?如果我正确理解了你的问题,你希望能够随机选择任何日期,并将其转换为周五晚上8点到周一上午8点的日期范围吗
您可以这样做:
import datetime
def make_payload(date_str):
today = datetime.date.fromisoformat(date_str)
monday = datetime.datetime.fromisoformat(
str(datetime.date.fromordinal(
(today.toordinal() - today.toordinal() % 7) + 1)) + " 08:00")
friday = datetime.datetime.fromisoformat(
str(datetime.date.fromordinal(
(today.toordinal() - today.toordinal() % 7) - 2)) + " 20:00")
payload = {'since': friday.isoformat(),
'until': monday.isoformat()}
return payload
payload = make_payload('2020-04-07')
print(payload['since'], payload['until'])
这将产生:
2020-04-03T20:00:00 2020-04-06T08:00:00
它以ISO格式的日期作为输入,并将其调整为最后一个星期五-星期一日历周期。你可以调整周一和周五来给不同的日子,如果这不是你想要的,但这给出了基本的想法。如果我正确理解了你的问题,你希望能够选择任意的日期,并将其转换为周五晚上8点到周一早上8点的日期范围吗 您可以这样做:
import datetime
def make_payload(date_str):
today = datetime.date.fromisoformat(date_str)
monday = datetime.datetime.fromisoformat(
str(datetime.date.fromordinal(
(today.toordinal() - today.toordinal() % 7) + 1)) + " 08:00")
friday = datetime.datetime.fromisoformat(
str(datetime.date.fromordinal(
(today.toordinal() - today.toordinal() % 7) - 2)) + " 20:00")
payload = {'since': friday.isoformat(),
'until': monday.isoformat()}
return payload
payload = make_payload('2020-04-07')
print(payload['since'], payload['until'])
这将产生:
2020-04-03T20:00:00 2020-04-06T08:00:00
它以ISO格式的日期作为输入,并将其调整为最后一个星期五-星期一日历周期。如果你不太喜欢星期一和星期五,你可以调整星期一和星期五,给不同的日子,但这给出了基本的想法。你想使用哪一个星期五和哪一个星期一?如果您在星期六调用此API,您希望发生什么?文档中不会找到此类信息吗?正如@AlecBrooks所提示的,您必须指定您想要获取的特定日期,使用此设置无法绕过。这就是说,它可以(1)为许多这样的日期范围生成请求,(2)取任意日期并导出相关的日期范围。@AlecBrooks该代码将专门在每周一运行,因此它只获取周末发生的事件。@Z4 tier好的,我想无法绕过特定日期。我将尝试使用你指出的可能性。谢谢。你想用哪个星期五和哪个星期一?如果您在星期六调用此API,您希望发生什么?文档中不会找到此类信息吗?正如@AlecBrooks所提示的,您必须指定您想要获取的特定日期,使用此设置无法绕过。这就是说,它可以(1)为许多这样的日期范围生成请求,(2)取任意日期并导出相关的日期范围。@AlecBrooks该代码将专门在每周一运行,因此它只获取周末发生的事件。@Z4 tier好的,我想无法绕过特定日期。我将尝试使用你指出的可能性。谢谢。注意:这可能不是计算此值的绝对最佳方法,使用
timedelta
,以避免来回转换为str
,可能更为惯用。这就是说,这是相当合理的,它是有效的,而且它没有做任何太非正统的事情。这非常有效。你完全明白我在找什么。很抱歉,如果我最初的帖子模糊不清,但非常感谢。这对我有用。:)注意:这可能不是计算此值的绝对最佳方法,使用timedelta
可能更为惯用,以避免来回转换为str
的额外位。这就是说,这是相当合理的,它是有效的,而且它没有做任何太非正统的事情。这非常有效。你完全明白我在找什么。很抱歉,如果我最初的帖子模糊不清,但非常感谢。这对我有用。:)