python - 在 Python 中获取一个月开始和结束的 unix 时间戳
问题描述
你好 StackOverflow Python 社区!
我想为一个月的开始和结束生成 Unix 时间戳。我正在寻找一种方法来检索 Python 中任意月份的最后一天(或第二天或分钟......)。
给定datetime.date
连续两个月的值,我可以通过从下一个月中减去一个增量值来获得一个月内的最后一个值,如下所示:
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()
我可以使用的属性,而不是动态地解决它?
解决方案
要获得下个月的第一天,一个选项(还有其他选项)可能是:
>>> import datetime
>>> my_date = datetime.datetime(2019, 4, 5)
>>> my_date
datetime.datetime(2019, 4, 5, 0, 0)
>>> first_day_this_month = datetime.datetime(my_date.year, my_date.month, 1)
>>> first_day_this_month
datetime.datetime(2019, 4, 1, 0, 0)
>>> some_day_next_month = first_day_this_month + datetime.timedelta(days=32)
>>> some_day_next_month
datetime.datetime(2019, 5, 3, 0, 0)
>>> first_day_next_month = datetime.datetime(some_day_next_month.year, some_day_next_month.month, 1)
>>> first_day_next_month
datetime.datetime(2019, 5, 1, 0, 0)
现在要获得当月的最后一秒,可以这样做:
>>> last_second_this_month = first_day_next_month - datetime.timedelta(seconds=1)
>>> last_second_this_month
datetime.datetime(2019, 4, 30, 23, 59, 59)
>>> import time
>>> time.mktime(last_second_this_month.timetuple())
1556683199.0
推荐阅读
- angular - 在 ngOnInit 之后调用 ngOnDestroy
- android - 如何在键盘布局中使用 ViewStub
- themes - PrestaShop 1.6 - 无法覆盖主题中的模块 tpl 文件
- wordpress - WordPress,我们如何获取浏览器网络监控中显示的所有js和css文件
- mattermost - 为用户添加短文本/徽章/图标
- aws-sam - 原因:无效的模板属性或属性 [Api]
- c# - 授权属性在我的项目中不起作用
- azure - 当不同容器注册表上的新映像可用时,如何触发 azure devops 构建管道?
- azure - 由于缺少“授权”标头,身份验证失败
- postgresql - Postgresql 从 JSONB 字段中的对象数组中获取键