【问题标题】:Python timedelta with secondsPython timedelta 与秒
【发布时间】:2021-09-07 13:25:54
【问题描述】:

timedelta(seconds= ) 的文档中,秒数应为Between 0 and 86399 inclusive。但是我希望通过timedelta(seconds=432000) 传递一个参数(以秒为单位的5 天。我知道我们可以通过days = 5 但最好以秒为单位编写parma。它大于86399,但在我测试时在控制台中,还是解决了几天。像这样在几秒钟内通过可以吗?非常感谢您的帮助。

nowtime = datetime.now()
print(nowtime)
2021-06-24 15:08:36.048664
plusdays = timedelta (seconds = 432000) 
print(nowtime+plusdays)
2021-06-29 15:08:36.048664

【问题讨论】:

  • 如果文档说最大值是 86399,那么如果您使用更大的值,您就是在冒险。明天可能会停止工作。

标签: python python-3.x datetime timedelta


【解决方案1】:

文档没有这么说 ;-) 他们说只有天、秒和微秒在内部存储,并以这样的方式进行标准化,即存储的内部秒数在 @987654322 @。

就你可以传递给构造函数的内容而言,几乎任何东西都可以;例如,即使是负秒数:

>>> from datetime import timedelta
>>> timedelta(hours=1, seconds=-1)
datetime.timedelta(seconds=3599)

示例

time.time() 通常返回自 1970 年开始(“Unix 纪元”)以来的秒数。这可以直接用于与 UTC 日期时间相互转换。

>>> import time
>>> from datetime import datetime, timedelta
>>> now = time.time(); datetime.utcnow()
datetime.datetime(2021, 6, 24, 21, 51, 27, 939029)
>>> now
1624571487.9390297
>>> datetime(1970, 1, 1) + timedelta(seconds=now)
datetime.datetime(2021, 6, 24, 21, 51, 27, 939030)

最终输出是在调用 utcnow() 时的一微秒内。

【讨论】:

  • 谢谢,您能详细说明一下吗?我指的是这个页面,上面写着If the normalized value of days lies outside the indicated range, OverflowError is raised.docs.python.org/3/library/datetime.html#timedelta-objects
  • 什么都没说秒,对吧?它说天。所有输入都转换为(仅)微秒、秒和天的混合;微秒和秒被规范化以强制它们进入记录的范围,这可能导致“进位”进入下一个更高的时间单位(微秒 -> 秒和秒 -> 天),如果最后一个天数超出了记录的天数范围,OverflowError 被提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 2016-11-24
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多