你好StackOverflow Python社区!
我想为一个月的开始和结束生成Unix时间戳,我正在寻找一种方法来在Python中检索任意月份的最后一天(或秒,或分钟...)。
给定连续两个月的datetime.date
值,我可以通过从下一个值中减去delta值来得到一个月中的最后一个值,如下所示:
import datetime
# dates without time
jan = datetime.date(2019, 1, 1)
feb = datetime.date(2019, 2, 1)
# start/end times
start_time = datetime.time(0, 0, 0, 0, tzinfo=datetime.timezone.utc)
end_time = datetime.time(23, 59, 59, 999, tzinfo=datetime.timezone.utc)
jan_start = datetime.datetime.combine(jan, start_time)
last_day = feb - datetime.timedelta (days = 1)
jan_end = datetime.datetime.combine(last_day, end_time)
do_stuff(jan_start, jan_end)
但是我这个几乎不懂python的人在试图找到一种方法来插入任意月份并得到相同的结果时遇到了困难。
import datetime
# start/end times
start_time = datetime.time(0, 0, 0, 0, tzinfo=datetime.timezone.utc)
end_time = datetime.time(23, 59, 59, 999, tzinfo=datetime.timezone.utc)
dates = {
"Jan19": datetime.date(2019, 1, 1),
"Feb19": datetime.date(2019, 2, 1),
"Mar19": datetime.date(2019, 3, 1),
"Apr19": datetime.date(2019, 4, 1)
}
for i in dates:
start = datetime.datetime.combine(dates[i], start_time)
end_day = dates[i].next() - datetime.timedelta (days = 1)
end = datetime.datetime.combine(end_day, end_time)
do_stuff(start, end)
只是,哎呀- Python字典是无序的,所以没有next()方法可以在i
上调用!
传统的方法可能是将2月1日的午夜等同于1月31日的最后一秒,但我很好奇如何在Python中检索任意月份的最后一天(或秒,或分钟......)。
我是否需要使用OrderedList,或者是否有一些模块对我的谷歌搜索免疫,我可以使用month.max()
属性,而不是动态地解决它?
3条答案
按热度按时间wd2eg0qa1#
要获取下个月的第一天,一个选项(还有其他选项)可以是:
现在,要获取当前月份的最后一秒,可以执行以下操作:
hl0ma9xz2#
与其试图找到“一个月的最后一秒”,不如直接找到“下个月的第一时刻”(这更容易找到),然后修改
do_stuff()
函数,只排除第二个参数。你可以通过以下几种方法来实现这一点:第一,使用
<
代替<=
;第二,从下个月的第一时刻减去任意小的时间增量:根据你在这里真正想做的事情,我个人正在开发一个名为
ranges
的模块,它将提供一个连续的Range
类(这样你就可以从1月1日(含)到2月1日(不含)),并可能在2019年9月中旬发布。e4eetjau3#
因为一年总是有12个月,所以你可以增加月份,避免对一个月的天数做假设,然后使用Python 3.3+中的timestamp来获得Unix时间: