使用python从昨天0000小时到今天0000小时获取unix时间

时间:2012-02-05 19:43:49

标签: python datetime unix-timestamp

我需要获得以下值

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

所以我在大纪元时间里有24小时。引用是今天但不是现在()

到目前为止,我有这个。

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

两个epoch_值实际上都是从now()返回的秒数,如1600小时(取决于我运行脚本的时间),而不是0000/2400小时。我知道最好是获取昨天的纪元时间,然后广告24小时才能获得结束日期。但我需要让第一部分正确:),也许我需要睡觉?

P.S。对不起代码样式不起作用,所以不会让我发布代码样式,并且非常令人沮丧得到SO发布。

1 个答案:

答案 0 :(得分:2)

更简单的方法可能是明确地构建日期:

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

这可以获得刚刚过夜的时间戳。正如您所知,time.mktime将为您提供时代价值。只需加上或减去24 * 60 * 60即可从那里获得上一个或下一个午夜。

哦!请注意,划时代的价值将是1970年午夜,1月1日 UTC 的秒数。如果你需要在你的时区午夜起几秒钟,请记得相应调整!

更新:测试代码,在下午1点之前从shell执行,PST:

>>> 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,那午夜你认为今天午夜是为了你的目的吗?