什么是昨天的午夜作为一个纪元时间?

t0m*_*myt 21 python datetime

我正试图绕过日期时间模块.我知道现在的时间作为一个时代和事件最后发生的时间(作为一个纪元时间).我需要做的是弄清楚该事件是否发生在昨天的午夜和午夜之间.

t = time.time() # is now
t2 = 1234567890 # some arbitrary time from my log
Run Code Online (Sandbox Code Playgroud)

24小时前是t - 86400,但我怎样才能将它上下调整到午夜.我很难找到一种方法来获取时间戳进出日期时间,或者操纵日期时间来设置时间.

Mar*_*ers 48

在半夜

生成最后一个午夜很容易:

from datetime import datetime, time

midnight = datetime.combine(datetime.today(), time.min)
Run Code Online (Sandbox Code Playgroud)

这结合了今天的日期(你可以使用date()或一个datetime()实例,你的选择),以及在午夜time.min形成一个datetime对象.

昨天

timedelta()你可以计算前一个午夜:

from datetime import timedelta

yesterday_midnight = midnight - timedelta(days=1)
Run Code Online (Sandbox Code Playgroud)

那是昨天

现在测试你的时间戳是否在这两点之间:

timestamp = datetime.fromtimestamp(some_timestamp_from_your_log)
if yesterday_midnight <= timestamp < midnight:
    # this happened between 00:00:00 and 23:59:59 yesterday
Run Code Online (Sandbox Code Playgroud)

现在都在一起了

合并为一个功能:

from datetime import datetime, time, timedelta

def is_yesterday(timestamp):
    midnight = datetime.combine(datetime.today(), time.min)
    yesterday_midnight = midnight - timedelta(days=1)
    return yesterday_midnight <= timestamp < midnight:

if is_yesterday(datetime.fromtimestamp(some_timestamp_from_your_log)):
    # ...
Run Code Online (Sandbox Code Playgroud)


小智 5

今天开始的午夜是:

midnight = (int(time.time() // 86400)) * 86400
Run Code Online (Sandbox Code Playgroud)

所以昨天的午夜是:

midnight = (int(time.time() // 86400)) * 86400 - 86400
Run Code Online (Sandbox Code Playgroud)