我试图将datetime.datetime.second
转换为Python 3中的整数。我想对此值进行舍入,然后使用函数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()
中,稍后在我的代码中显示该时间。
答案 0 :(得分:1)
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
个实例的内部信息;正是这些对象在.second
类的实例上生成属性.minute
,.hour
和datetime.datetime
:
>>> dt = datetime.datetime.now()
>>> dt.second
26
>>> datetime.datetime.second.__get__(dt, datetime.datetime)
26