将 datetime.datetime.second 转换为整数
Converting datetime.datetime.second to an integer
我正在尝试将 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
实际上是什么 return 以及我的问题有哪些解决方案。
我希望代码 return 当前时间的秒数。例如,如果它是 10:29:34 而代码是 运行 我希望 s
设置为 34。我试图将秒数四舍五入到 0
或 5
.所以在这种情况下,我希望将秒数四舍五入为 35
,然后获取 10
和 29
的值并将它们存储在 h
和 m
中分别。然后将这些值放入 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.second
、datetime.datetime.minute
和datetime.datetime.hour
是descriptor objects,让你访问datetime.datetime
实例的内部信息;正是这些对象在 datetime.datetime
class:
的实例上创建属性 .second
、.minute
和 .hour
>>> dt = datetime.datetime.now()
>>> dt.second
26
>>> datetime.datetime.second.__get__(dt, datetime.datetime)
26
我正在尝试将 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
实际上是什么 return 以及我的问题有哪些解决方案。
我希望代码 return 当前时间的秒数。例如,如果它是 10:29:34 而代码是 运行 我希望 s
设置为 34。我试图将秒数四舍五入到 0
或 5
.所以在这种情况下,我希望将秒数四舍五入为 35
,然后获取 10
和 29
的值并将它们存储在 h
和 m
中分别。然后将这些值放入 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.second
、datetime.datetime.minute
和datetime.datetime.hour
是descriptor objects,让你访问datetime.datetime
实例的内部信息;正是这些对象在 datetime.datetime
class:
.second
、.minute
和 .hour
>>> dt = datetime.datetime.now()
>>> dt.second
26
>>> datetime.datetime.second.__get__(dt, datetime.datetime)
26