【问题标题】:How to convert this duration into days/hours/minutes/seconds in Python/Django?如何在 Python/Django 中将此持续时间转换为天/小时/分钟/秒?
【发布时间】:2012-12-26 01:08:15
【问题描述】:

我有这样的持续时间:

(1, 2, 3, 11)

它采用天/小时/分钟/秒格式。我怎样才能显示类似:1 days, 2 hours and 3 minutes。我不需要秒。所以,如果持续时间是:

(0, 2, 3, 1)

它应该显示为2 hours and 3 minutes。 如果持续时间是:

(0, 0, 3, 11)

应该显示为3 minutes.

我怎样才能做到这一点?谢谢

【问题讨论】:

    标签: python django python-2.6


    【解决方案1】:

    这是针对 Python 2.6 和英文单数/复数的编辑答案:

    def f(x):
        parts = ['%d %s%s' % (a, p, ('', 's')[a > 1]) for a,p in zip(x, ('day', 'hour', 'minute')) if a]
        return ' and '.join(c for c in [', '.join(parts[:-1]), parts[-1]] if c)
    

    测试:

    >>> print f((1, 2, 3, 11))
    1 day, 2 hours and 3 minutes
    
    >>> print f((0, 2, 3, 1))
    2 hours and 3 minutes
    
    >>> print f((0, 0, 3, 11))
    3 minutes
    

    【讨论】:

    • 您好,感谢您的回答。但我使用 Python 2.6。你能编辑你的答案吗?
    • @user1881957 真的吗? "%d %s" % (a, p)
    • 它有效,但出于好奇,如果它是 1 则可以显示分钟,如果大于 1 则显示分钟。以小时/分钟为单位的相同情况
    【解决方案2】:

    你打算做多少?

    如果它很多,并且会重复很多,你可以写一个函数来为你做;

    def days(t):
        oxford_comma = False
        a = [" day", " hour", " minute"]
        s = []
        if len(t) != 4:
            return "incorrect format"
        else:
            for i in range(3):
                if t[i] != 0:
                    plural = "s" if t[i] > 1 else ""
                    s.append(str(t[i]) + a[i] + plural + ", ")
    
    
            if len(s) > 1:
                if not oxford_comma:
                    s[-2] = s[-2].replace(",","")
                s.insert(len(s)-1,"and ")
            return "".join(s)[:-2]
    
    
        print days((1,2,3,11))      #1 day, 2 hours, and 3 minutes
        print days((0,2,3,1))       #2 hours, and 3 minutes
        print days((0,0,3,11))      #3 minutes
        print days((1,1,1,11))      #1 day, 1 hour, and 1 minute
    

    如果需要,请更改 oxford_comma

    它还考虑了复数。

    抱歉,有点乱 - 它肯定可以清理 - 很匆忙!

    【讨论】:

    • OP 不希望在“and”之前有逗号
    • 它有效,但出于好奇,如果它是 1 则可以显示分钟,如果大于 1 则显示分钟。以小时/分钟为单位的相同情况。
    • 哦,是的。非常感谢朋友!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2017-05-10
    相关资源
    最近更新 更多