我有一个包含以下字段的模型
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'
答案 0 :(得分:0)
hour
参数由于time
对象的范围从00:00
到23: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对象。