【问题标题】:get unix time from yesterday 0000 hrs to today 0000 hours using python使用python获取从昨天0000小时到今天0000小时的unix时间
【发布时间】:2012-02-05 19:43:48
【问题描述】:

我需要得到以下值

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 小时以获取结束日期。但我需要把第一部分做好:),也许我需要睡觉?

附言抱歉,代码样式不起作用,所以不允许我发布代码样式,让 SO 发布此内容非常令人沮丧。

【问题讨论】:

  • 昨天午夜和今天午夜相差 24 小时,一年只有 363 天(大约)。在夏令时更改时间时,简单地添加 24 小时是错误的。

标签: python datetime unix-timestamp


【解决方案1】:

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

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

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

哦!请注意,纪元值将是从 1970 年午夜 1 月 1 日 UTC 开始的秒数。如果您需要时区从午夜开始的秒数,请记住相应调整!

更新:测试代码,在太平洋标准时间下午 1 点之前从 shell 执行:

>>> 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 星期一,您认为今天的午夜是哪个午夜?

【讨论】:

  • 我会试试这个。看起来它会起作用。是的,我确实需要 UTC 时代。谢谢。编辑:是的,正是我需要的。奇怪的是 python 没有更简单的方法来做到这一点。非常感谢。
  • 很抱歉,当我使用 mktime 时不起作用。仍然给我同样的结果。
  • 你确定吗?我刚刚在 Python shell 中试了一下,得到了我所期望的结果:从上个午夜到现在的时间差 = 当前时间。 >>> n = datetime.now() >>> m = datetime( n.year, n.month, n.day ) >>> nt = time.mktime( n.timetuple() ) >>> mt = time .mktime( m.timetuple() ) >>> (nt - mt) / 60 / 60 最终结果是 12.975833333333332
  • 你能把你的代码粘贴到你的答案中吗?我可以按照你的方法试试。我认为问题在于函数假设我的时区而不是 UTC。
  • 好的,贴上去。 UTC 问题在这里应该没有实际意义:当您转换为纪元值时,时区信息会丢失;自 1970 年以来,该值在 unix 上应始终为秒。您可以通过将您的时代值反馈给 time.gmtime() 来测试这一点。你应该得到与你给它相同的时间,减去你的时区偏移量。
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多