【问题标题】:Python 3 - How to change the syntax of a "datetime.timedelta(seconds=xxx)" object?Python 3 - 如何更改“datetime.timedelta(seconds=xxx)”对象的语法?
【发布时间】:2022-11-25 10:52:51
【问题描述】:

下面是一个使用 Python 解释器的简单示例:

>>> import datetime
>>> 
>>> time=datetime.timedelta(seconds=10)
>>> str(time)
'0:00:10'
>>>

我怎样才能改变的语法时间当我将它转换为字符串时对象?结果,我想看看'00:00:10'并不是'0:00:10'.我真的不明白为什么小时块中的最后一个零丢失了,我想在每个块中始终看到两位数。我该怎么做?

【问题讨论】:

  • 你为什么使用timedelta而不是实际的datetime.timedatetime.datetime?后者可以用 datetime.strftime(或普通格式字符串或 f-strings)格式化,让您完全控制,只需阅读 datetime 文档。
  • 这回答了你的问题了吗? Format timedelta to string
  • 那么如何在不使用“timedelta”的情况下将秒数转换为小时、分钟和秒数呢?什么是正确的语法?然后我需要采用这种格式 '%H:%M:%S' 的字符串。

标签: python python-3.x datetime


【解决方案1】:

您必须创建自定义格式化程序才能执行此操作。

@gumption 解决方案的 Python3 变体,用 python2 编写。 This is the link to his solution

自定义格式化程序

from string import Template

class TimeDeltaTemp(Template):
    delimiter = "%"

def strfdtime(dtime, formats):
    day = {"D": dtime.days}
    hours, rem = divmod(dtime.seconds, 3600)
    minutes, seconds = divmod(rem, 60)
    day["H"] = '{:02d}'.format(hours)
    day["M"] = '{:02d}'.format(minutes)
    day["S"] = '{:02d}'.format(seconds)
    time = TimeDeltaTemp(formats.upper())
    return time.substitute(**day)

用法


import datetime

time=datetime.timedelta(seconds=10)
print(strfdtime(time, '%H:%M:%S'))
time=datetime.timedelta(seconds=30)
print(strfdtime(time, '%h:%m:%s'))

输出

00:00:10
00:00:30

【讨论】:

  • 很酷,但这是实现我目标的唯一途径吗?我的意思是,我真的必须创建自定义类和函数吗?
  • 我敢肯定还有另一种方法,但我认为这会更清洁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
相关资源
最近更新 更多