Get seconds since midnight in python
我想知道从上个午夜开始的秒数。Python最优雅的方式是什么?
- 你想怎么做?你能和我们分享一些代码吗?(我确信投票下降只是因为这个…)
- 实际上,我在StackOverflow上搜索这个问题,但没有得到答案。在咨询了python文档之后,我有了一个我喜欢的解决方案。为了帮助其他有相同问题的人,我将我的解决方案作为问题和答案发布。但显然人们不喜欢这样,尽管它在这里得到了提升blog.stackoverflow.com/2011/07/…
- "被geoffsear,levon,gnat,a5c1d2h2i1m2o1r2t1,gaige作为一个不真实的问题结束。"我强烈反对。
- "很难说这里有人问什么。"事实上,这很明显,别那么学究了。
- 时间戳%86400怎么样?
- @Nourchawich聪明的想法,如果你的时区是UTC的话,这也应该有效。
最好对返回当前日期/时间的函数进行单个调用:
1 2 3 4
| from datetime import datetime
now = datetime.now()
seconds_since_midnight = (now - now.replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds() |
。
或者是
1
| datetime.now() - datetime.now() |
为这里的任何人返回零时间增量?
- 为什么用一个电话更好?
- 否则你会得到两个"现在"的概念。
- @因为创建我的now的瞬间就是我想计算秒数的瞬间。如果您在一行中使用now,然后在第二行中使用midnight(稍后执行nano/micro/seconds),您的计算可能会出错。想象午夜发生在那个时候。
- 只使用"导入日期时间"可以避免屏蔽代码中其他地方可能需要的其他日期时间方法。当然,您必须使用datetime.datetime.now(),但至少它是明确的。
- @dirk-now()-now()是一个17微秒的差异(在我的笔记本电脑上),但datetime.now().minute+datetime.now().second/60-显然是一个相当合理的计算-将关闭59秒,大约是350万次尝试中的一次。
1 2 3 4
| import datetime
now = datetime.datetime.now()
midnight = now.replace(hour=0, minute=0, second=0, microsecond=0)
seconds = (now - midnight).seconds |
号
或
1 2 3 4
| import datetime
now = datetime.datetime.now()
midnight = datetime.datetime.combine(now.date(), datetime.time())
seconds = (now - midnight).seconds |
选择哪个是一个品味问题。
- 在这里。:-)看起来,我们几乎同时添加了它。虽然在测试时发现我拼写错误。
- 午夜的另一种方式是:midnight = datetime(d.year, d.month, d.day)。顺便说一句,如果今天有DST转换,任何不使用mktime()或等效值的回答都会失败。
- 您也可以使用正确的时区实现。
我会那样做的
1 2 3 4 5
| import datetime
import time
today = datetime.date.today()
seconds_since_midnight = time.time() - time.mktime(today.timetuple()) |
- 如果这是你问题的一部分,最好编辑你的问题并将其添加到你的原始帖子中作为你的尝试。
- @尤米罗:把它合并成一行并不能让它走得更快。
- @尤米罗说得对,你说得对
- @尤米罗:那不是"一个电话"。但是是的,它解决了这个问题,没有两个"现在"的引用,这可能就是你的意思。
- 您的答案是唯一一个考虑本地时区的答案(其他答案很容易由于DST转换而产生一小时错误)。mktime()也可能会失败,请参阅find if 24 hrs have passed between datetime-python
另一种选择:
1 2
| from datetime import datetime
seconds = (datetime.now() - datetime.today()).seconds |
。
- datetime.today也返回小时/分钟/秒/微秒。
- 是的,结果是datetime.today()与date.today()不同。这就是为什么我以前从来没有用过它,我想。似乎是一个毫无意义的函数。