将 datetime.datetime.second 转换为整数

Converting datetime.datetime.second to an integer

我正在尝试将 datetime.datetime.second 转换为 Python 中的整数 3. 我想对该值进行舍入,然后在函数 datetime.time(hour=h,minute=m,second=s) 中使用整数值,其中 hms 表示整数。我目前收到一条错误消息,内容如下:

    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 实际上是什么 return 以及我的问题有哪些解决方案。

我希望代码 return 当前时间的秒数。例如,如果它是 10:29:34 而代码是 运行 我希望 s 设置为 34。我试图将秒数四舍五入到 05.所以在这种情况下,我希望将秒数四舍五入为 35,然后获取 1029 的值并将它们存储在 hm 中分别。然后将这些值放入 datetime.time() 并稍后在我的代码中显示该时间。

datetime.datetime.second 没有给你当前时间。它不是您通常想要使用的对象;它是 datetime.datetime class.

的一个实现细节

要获取当前时间作为 datetime.time() 对象,请在返回的 datetime 实例上使用 datetime.datetime.now() function, then use the .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.seconddatetime.datetime.minutedatetime.datetime.hourdescriptor objects,让你访问datetime.datetime实例的内部信息;正是这些对象在 datetime.datetime class:

的实例上创建属性 .second.minute.hour
>>> dt = datetime.datetime.now()
>>> dt.second
26
>>> datetime.datetime.second.__get__(dt, datetime.datetime)
26