我正尝试在Python3中将datetime.datetime.second转换为整数,我想对这个值进行四舍五入,然后在函数datetime.time(hour=h,minute=m,second=s)中使用整数值,其中h、m和s表示整数。我目前收到一条错误消息,内容如下:
s = int(datetime.datetime.second)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'getset_descriptor'下面是我的代码片段,它显示了我正在尝试做的事情。
s = int(datetime.datetime.second)
#code to be added here should round s to nearest 0 or 5
m = int(datetime.datetime.minute)
h = int(datetime.datetime.hour)
t0 = datetime.time(hour=h,minute=m,second=s)请解释一下为什么这个类型转换不起作用,datetime.datetime.second实际上返回的是什么,我的问题有什么解决方案。
我期望代码返回当前时间的秒数。例如,如果它是10:29:34,当代码运行时,我希望s设置为34。我试图将秒数四舍五入为0或5。因此,在本例中,我希望将秒数舍入为35,然后获取10和29的值,并将它们分别存储在h和m中。然后将这些值放入datetime.time()中,并在稍后的代码中显示该时间。
发布于 2018-02-06 18:25:55
datetime.datetime.second不会向您提供当前时间。它不是您通常想要使用的对象;它是datetime.datetime类的实现细节。
要将当前时间作为datetime.time()对象获取,请使用datetime.datetime.now() function,然后在返回的datetime实例上使用.time() method:
now = datetime.datetime.now().time()演示:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 2, 6, 10, 29, 9, 758417)
>>> datetime.datetime.now().time()
datetime.time(10, 29, 11, 837654)如果需要操作这些值,可以使用time.replace() method使用更新后的值创建一个新的datetime.time()实例。
因此,要舍入秒值,您可以使用:
now = datetime.datetime.now().time()
now_rounded = now.replace(second=int(5 * round(now.second / 5))) # round to nearest multiple of 5准确地说,datetime.datetime.second、datetime.datetime.minute和datetime.datetime.hour是descriptor objects,它们允许您访问datetime.datetime实例的内部信息;正是这些对象使datetime.datetime类的实例具有.second、.minute和.hour属性:
>>> dt = datetime.datetime.now()
>>> dt.second
26
>>> datetime.datetime.second.__get__(dt, datetime.datetime)
26https://stackoverflow.com/questions/48640622
复制相似问题