AttributeError: 'timedelta' object has no attribute 'strptime' at Form1, line 38
AttributeError: 'timedelta' object has no attribute 'strptime' at Form1, line 38
尝试将我用 anvil 制作的计时器应用程序更改为显示 HH:MM:SS 而不是仅显示秒数
"self.label_time_elapsed.text = "{}".format(
(datetime.now() - self.start_time).strftime('%H:%M:%S'))
)" - 从我问的另一个问题试过这个,现在我有一个不同的错误
from anvil import *
import anvil.server
import anvil.tables as tables
import anvil.tables.query as q
from anvil.tables import app_tables
from datetime import datetime
class Form1(Form1Template):
def __init__(self, **properties):
# Set Form properties and Data Bindings.
self.init_components(**properties)
# Any code you write here will run when the form opens.
self.start_time = None
def button_start_click(self, **event_args):
"""This method is called when the button is clicked"""
self.start_time = datetime.now()
self.button_start.visible = False
self.button_stop.visible = True
def button_stop_click(self, **event_args):
"""This method is called when the button is clicked"""
self.stop_time = datetime.now()
self.total_time = self.stop_time - self.start_time
anvil.server.call('add_session', self.start_time,
self.total_time.seconds)
self.start_time = None
self.button_start.visible = True
self.button_stop.visible = False
def timer_progress_tick(self, **event_args):
"""This method is called Every [interval] seconds. Does not trigger
if [interval] is 0."""
if self.start_time is not None:
self.label_time_elapsed.text = "{}".format(
(datetime.now() - self.start_time).strptime('%H:%M:%S'))
AttributeError: 'timedelta' 对象没有属性 'strptime'
在 Form1,第 38 行
timedelta
对象包含两个日期之间的差异 - 2 年、2 毫秒等。
您正试图将此 timedelta 强制转换为日期/时间的字符串表示形式;瞬间,这是不可能的。
now - self.start_time
不是日期或时间,它是从那时到现在经过的时间量。将其表示为秒:
(datetime.now() - self.start_time).total_seconds()
编辑:将这些秒数转换为 HH:MM:SS
:
td = datetime.now() - self.start_time
minutes, seconds = divmod(td.seconds + td.days * 86400, 60)
hours, minutes = divmod(minutes, 60)
self.label_time_elapsed.text = '{:d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
您可以尝试使用自定义函数。
例如:
import datetime
def cust(seconds):
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
return "{hour}:{min}:{sec}".format(hour=int(h), min=int(m), sec=int(s))
now = datetime.datetime.now()
d = (now - datetime.datetime.strptime("2016-01-01", "%Y-%m-%d")).total_seconds()
print(cust(d))
输出:
30349:52:12
你的情况
cust(datetime.now() - self.start_time).total_seconds())
尝试将我用 anvil 制作的计时器应用程序更改为显示 HH:MM:SS 而不是仅显示秒数
"self.label_time_elapsed.text = "{}".format( (datetime.now() - self.start_time).strftime('%H:%M:%S')) )" - 从我问的另一个问题试过这个,现在我有一个不同的错误
from anvil import *
import anvil.server
import anvil.tables as tables
import anvil.tables.query as q
from anvil.tables import app_tables
from datetime import datetime
class Form1(Form1Template):
def __init__(self, **properties):
# Set Form properties and Data Bindings.
self.init_components(**properties)
# Any code you write here will run when the form opens.
self.start_time = None
def button_start_click(self, **event_args):
"""This method is called when the button is clicked"""
self.start_time = datetime.now()
self.button_start.visible = False
self.button_stop.visible = True
def button_stop_click(self, **event_args):
"""This method is called when the button is clicked"""
self.stop_time = datetime.now()
self.total_time = self.stop_time - self.start_time
anvil.server.call('add_session', self.start_time,
self.total_time.seconds)
self.start_time = None
self.button_start.visible = True
self.button_stop.visible = False
def timer_progress_tick(self, **event_args):
"""This method is called Every [interval] seconds. Does not trigger
if [interval] is 0."""
if self.start_time is not None:
self.label_time_elapsed.text = "{}".format(
(datetime.now() - self.start_time).strptime('%H:%M:%S'))
AttributeError: 'timedelta' 对象没有属性 'strptime' 在 Form1,第 38 行
timedelta
对象包含两个日期之间的差异 - 2 年、2 毫秒等。
您正试图将此 timedelta 强制转换为日期/时间的字符串表示形式;瞬间,这是不可能的。
now - self.start_time
不是日期或时间,它是从那时到现在经过的时间量。将其表示为秒:
(datetime.now() - self.start_time).total_seconds()
编辑:将这些秒数转换为 HH:MM:SS
:
td = datetime.now() - self.start_time
minutes, seconds = divmod(td.seconds + td.days * 86400, 60)
hours, minutes = divmod(minutes, 60)
self.label_time_elapsed.text = '{:d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
您可以尝试使用自定义函数。
例如:
import datetime
def cust(seconds):
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
return "{hour}:{min}:{sec}".format(hour=int(h), min=int(m), sec=int(s))
now = datetime.datetime.now()
d = (now - datetime.datetime.strptime("2016-01-01", "%Y-%m-%d")).total_seconds()
print(cust(d))
输出:
30349:52:12
你的情况
cust(datetime.now() - self.start_time).total_seconds())