python - 替代 datetime.datetime.strftime() 用于删除不需要的时间单位
问题描述
我想将两个日期时间与精确的字符串输出进行比较,例如“3 小时、2、分钟、46 秒”。现在,假设我在 UTC 中有两个 datetime 对象,我需要它们能够是任意数量但仍切断不需要的值。例子:
>>> import datetime
>>> date1 = datetime.datetime.now()
>>> date2 = datetime.datetime.fromtimestamp(123456789)
>>> date2 - date1
datetime.timedelta(-16362, 59566, 655021)
现在我可以将datetime.datetime.strftime()
其用作跟进,但我可以遇到的值范围很广(1 秒到几个月),我想切断不需要的值并避免“0 个月、0 周……等”。和“1 小时 0 分钟 0 秒”,不进行四舍五入(值始终为正)。有没有一种有效的方法来动态地做到这一点,只显示相关的时间值?我查看了类似于如何在 python 中找到两个日期时间对象之间的时间差的其他问题?但没有人完全回答我的问题,经过数小时的修补,我无法自己弄清楚。
解决方案
问题:......这样做只显示相关的时间值?
以下实现您自己的class Timedelta
:
class Timedelta(object):
def __init__(self, td):
self._td = td
def _calc(s, f):
_s = int(s % f)
return _s, int(s / f)
s, self.hours = _calc(self._td.seconds, (60 * 60))
self.seconds, self.minutes = _calc(s, 60)
def __str__(self):
r = ""
for v in [('Days', self._td.days), ('Hours', self.hours), ('Minutes', self.minutes), ('Seconds', self.seconds)]:
if v[1] != 0:
lingua = v[0]
if v[1] == 1: lingua = v[0][:-1]
r += "{} {} ".format(v[1], lingua)
return r
def __repr__(self):
return "({}) Days:{} Hours:{} Minutes:{} Seconds:{}"\
.format((self._td.seconds), self._td.days, self.hours, self.minutes, self.seconds)
用法:
date1 = dt.datetime(2018, 9, 17, hour=18, minute=23, second=0)
date2 = dt.datetime(2018, 9, 17, hour=22, minute=23, second=10)
dtt = date2 - date1
print("dtt:{}".format(dtt))
tdelta = Timedelta(date2 - date1)
print("Timedelta::\__repr\__: {}".format(tdelta.__repr__()))
print("Timedelta::\__str\__: {}".format(tdelta))
输出:
dtt :4:00:10
Timedelta::__repr__: (14410) 天数:0 小时:4 分钟:0 秒:10
Timedelta:__str__: 4 小时 10 秒
用 Python 测试:3.4.2
推荐阅读
- javascript - Angular 和 rxjs
- linux - 我应该在 .bash_profile 中的哪里插入 PATH?
- android - 膨胀类 com.google.android.material.floatingactionbutton.FloatingActionButton 仪器测试时出错
- latex - 如何防止长方程跨越两列页面?
- http - 如何从 Power Automate“收到 HTTP 请求时”触发操作中获取文件名
- python - Python Re:经过测试的正则表达式模式不返回匹配项
- javascript - 如何使用 java-script 或 Jquery 对 HTML5 表上的重复单元格值进行行计数?
- optaplanner - 两个规划实体的建设问题
- python - Python - pyinstaller:读取脚本内的路径文件以在 pyinstaller 中使用
- sql - 如何在 Presto 中将小时数解析为人类可读的字符串?(时间小数)