【问题标题】:AttributeError: 'timedelta' object has no attribute 'strptime' at Form1, line 38AttributeError: 'timedelta' 对象在 Form1 第 38 行没有属性 'strptime'
【发布时间】:2019-06-18 06:52:45
【问题描述】:

尝试将我的由铁砧制作的计时器应用程序更改为仅显示 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 行

【问题讨论】:

标签: python python-datetime timedelta


【解决方案1】:

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)

【讨论】:

  • "(datetime.now() - self.start_time).total_seconds()" 让我显示 55.50961 而不是 HH:MM:SS 格式
  • @TonyFoolsOrbis 更新了我的答案以显示如何将秒转换为小时:分钟:秒
  • 非常感谢,我进一步研究python,以便我将来可以编写简单的代码来帮助其他人
【解决方案2】:

您可以尝试使用自定义函数。

例如:

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 中使用自定义功能需要付费订阅..
猜你喜欢
  • 2020-07-07
  • 2021-11-09
  • 2020-07-12
  • 2020-11-07
  • 2019-04-29
  • 2013-10-29
  • 2021-10-26
  • 2020-07-16
  • 2012-12-01
相关资源
最近更新 更多