在时间场增加时间

时间:2018-06-19 07:46:55

标签: python django

我有一个包含以下字段的模型

time_start = models.TimeField(u"Start Time", blank=False)

我想在开始时间加1小时并将其保存在列表中

这是我试过的

import datetime as dt
start_time = Timeslot.objects.get(pk=1)
start = start_time.time_start
print(start)
a = (start+dt.timedelta(hours=1)).time()
print(a)
li = []
li.append(a)

但我收到错误

unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

2 个答案:

答案 0 :(得分:0)

替换hour参数

由于time对象的范围从00:0023:59。如果你添加一个小时,它可能因此超出范围,因此它不再是time对象。

然而,我们可以使用环绕(这意味着23:59,并且两分钟00:01)来实现这一点,例如:

a = start.replace(hour=(start.hour+1) % 24)

因此,我们在hour替换了start的{​​{1}}(我们不会在start对象上替换它,而是创建一个副本)(start.hour + 1) % 24。模数24是执行环绕的必要条件。

DateTimeField

中存储时间戳

然而,上面的不是这是一个很好的方法:通常时间取决于时区(位置)和特定日期(例如夏令时,有些国家改变了时区等。)。

因此,我建议您使用DateTimeField代替TimeField。例如,在2018年10月28日,世界上某些地方进入夏令时,这意味着如果你加一小时,时钟在某些情况下仍会显示相同的数字。使用TimeField时,这种情况就会丢失:我们将更改时钟的数量,无论时间是什么,以及用户文化的具体规律是什么。

答案 1 :(得分:0)

您也可以使用combine方法。

(dt.datetime.combine(dt.date(1,1,1), start) + dt.timedelta(hours=1)).time()

此代码将根据需要返回datetime.time对象。