首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >datetime.datetime.strftime()的替代方法,用于减少不需要的时间单位

datetime.datetime.strftime()的替代方法,用于减少不需要的时间单位
EN

Stack Overflow用户
提问于 2018-09-16 13:08:06
回答 1查看 354关注 0票数 0

我想用一个精确的字符串输出来比较两个日期时间,比如"3小时2分46秒“。现在,假设我在UTC中有两个datetime对象,我需要它们能够是一个任意值,但仍然可以去掉不需要的值。示例:

代码语言:javascript
复制
>>> 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秒“,不进行舍入(值始终为正数)。有没有一种有效的方法来动态地只显示相关的时间值?我已经看过其他类似于How do I find the time difference between two datetime objects in python?的问题,但都没有完全回答我的问题,而且我自己也无法在修修补补很长时间后找到答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 03:26:10

Question:...这样做只显示相关的时间值吗?

以下代码实现了您自己的class Timedelta

代码语言:javascript
复制
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)

Usage

代码语言:javascript
复制
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))

Output

dtt:4:00:10

Timedelta::__repr__:(14410)天:0小时:4分钟:0秒:10

Timedelta:__str__:4小时10秒

使用Python测试的:3.4.2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52351116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档