假设Python中的值为datetime.time,是否有一种标准方法可以将整数秒加到它上面,例如,11:34:59+3=11:35:02

这些显而易见的 idea 行不通:

>>> datetime.time(11, 34, 59) + 3
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'
>>> datetime.time(11, 34, 59) + datetime.timedelta(0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
>>> datetime.time(11, 34, 59) + datetime.time(0, 0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'

最后,我编写了如下函数:

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)

不过,我不禁在想,我错过了一种更简单的方式来做这件事.

相关

推荐答案

您可以使用datetime个变量和timedelta,并通过提供一个虚拟日期,然后使用time来获得时间值.

例如:

import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())

结果为相隔3秒的两个值:

11:34:59
11:35:02

你也可以 Select 更具可读性的

b = a + datetime.timedelta(seconds=3)

如果你愿意的话.


如果您正在寻找一个可以实现这一点的函数,您可以使用下面的addSecs:

import datetime

def addSecs(tm, secs):
    fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
    fulldate = fulldate + datetime.timedelta(seconds=secs)
    return fulldate.time()

a = datetime.datetime.now().time()
b = addSecs(a, 300)
print(a)
print(b)

这将产生:

 09:11:55.775695
 09:16:55

Python相关问答推荐

按日期和组增量计算总价值

情节生成的饼图文本超出页面边界

想要使用Polars groupby_Dynamic来缩减时间序列收件箱(包括空垃圾箱)

Docker-compose:为不同项目创建相同的容器

如何处理必须存在于环境中但无法安装的Python项目依赖项?

将numpy矩阵映射到字符串矩阵

在for循环中仅执行一次此操作

将numpy数组存储在原始二进制文件中

从收件箱中的列中删除html格式

删除所有列值,但判断是否存在任何二元组

如何在虚拟Python环境中运行Python程序?

Python虚拟环境的轻量级使用

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

使用groupby方法移除公共子字符串

使用Python从rotowire中抓取MLB每日阵容

Flask Jinja2如果语句总是计算为false&

基于Scipy插值法的三次样条系数

使用字典或列表的值组合

如何在Gekko中使用分层条件约束