使用Python获取从昨天00:00到今天00:00的Unix时间

3 投票
1 回答
5067 浏览
提问于 2025-04-17 12:23

我需要获取以下值

Today = 6th Feb
time 1 = 5th Feb 0000 hrs
time 2 = 6th Feb 0000 hrs.

我有24小时的时间,格式是epoch时间。参考时间是今天,但不是现在的时间()

到目前为止,我有这个。

yesterday = datetime.date.today() - datetime.timedelta(days=1)
epoch_yesterday =  time.mktime(yesterday.timetuple())
epoch_today = time.mktime(datetime.date.today().timetuple())

这两个epoch_值实际上是从现在的时间开始计算的秒数,比如1600小时(具体取决于我运行脚本的时间),而不是从0000/2400小时开始。我明白,获取昨天的epoch时间,然后加上24小时来得到结束时间会更好。但是我需要先把第一部分搞对 :),也许我需要休息一下?

附言:抱歉代码格式没有正常显示,StackOverflow不让我用代码格式发帖,搞得我很沮丧。

1 个回答

3

一种更简单的方法是这样明确地构造日期:

now = datetime.now()
previous_midnight = datetime.datetime( now.year, now.month, now.day )

这样你就能得到刚过午夜的时间戳。正如你所知道的,time.mktime 可以帮你得到从1970年1月1日午夜开始的时间值。然后你只需加上或减去 24 * 60 * 60,就能得到前一个或下一个午夜。

哦!要注意,这个时间值是从1970年1月1日午夜(UTC)开始计算的秒数。如果你需要的是你所在时区的午夜秒数,记得要相应调整哦!

更新:测试代码是在太平洋时间(PST)下午1点前执行的:

>>> from datetime import datetime
>>> import time
>>> time_now = datetime.now()
>>> time_at_start_of_today_local = datetime( n.year, n.month, n.day )
>>> epochal_time_now = time.mktime( time_now.timetuple() )
>>> epochal_time_at_start_of_today_local = time.mktime( time_at_start_of_today.timetuple() )
>>> hours_since_start_of_day_today = (epochal_time_at_start_of_today_local - epochal_time_now) / 60 / 60
12.975833333333332

注意:time_at_start_of_today_local 是从1970年1月1日午夜到你所在时区当前日期开始的秒数。如果你想要的是UTC时间的当前日期开始的秒数,那么就要从 time_at_start_of_today_local 中减去你的时区差。

>>> time_at_start_of_today_utc = time_at_start_of_today_local - time.timezone

要知道,这里会涉及到一些奇怪的情况,具体来说,你关心的是哪一天呢?如果在你的时区现在是星期二,但在UTC时间还是星期一,那么你认为今天的午夜应该是哪一个呢?

撰写回答