Python可读的人类日期差异

13 投票
7 回答
8698 浏览
提问于 2025-04-16 00:31

我有一些这样的日期字符串:

Mon Jun 28 10:51:07 2010
Fri Jun 18 10:18:43 2010
Wed Dec 15 09:18:43 2010

有没有什么简单的Python方法可以计算它们之间的天数差?假设时区是一样的。

这些字符串是通过Linux命令得到的。

编辑:谢谢大家,很多很好的回答

7 个回答

6

当然可以!请看下面的内容:

这个问题主要是在讨论如何处理一些编程中的常见情况。很多时候,我们在写代码的时候,会遇到一些错误或者需要优化的地方。这个时候,理解这些问题的根源就显得特别重要。

比如,有时候代码运行得很慢,可能是因为某些部分的逻辑不够高效。我们可以通过分析代码,找出哪些地方可以改进,来让程序运行得更快。

另外,代码中的错误也很常见。有时候是因为拼写错误,有时候是因为使用了不合适的函数。解决这些问题需要仔细检查代码,确保每一行都能正常工作。

总之,编程就像是解谜,遇到问题时要冷静分析,找到解决办法。希望这些内容能帮助你更好地理解编程中的一些常见问题!

>>> import datetime
>>> a = datetime.datetime.strptime("Mon Jun 28 10:51:07 2010", "%a %b %d %H:%M:%S %Y")
>>> b = datetime.datetime.strptime("Fri Jun 18 10:18:43 2010", "%a %b %d %H:%M:%S %Y")
>>> c = a-b
>>> c.days
10
7

使用 strptime

示例用法:

from datetime import datetime

my_date = datetime.strptime('Mon Jun 28 10:51:07 2010', '%a %b %d %H:%M:%S %Y')
print my_date

编辑:

你也可以以人类易读的方式打印时间差,比如这样:

from time import strptime
from datetime import datetime

def date_diff(older, newer):
    """
    Returns a humanized string representing time difference

    The output rounds up to days, hours, minutes, or seconds.
    4 days 5 hours returns '4 days'
    0 days 4 hours 3 minutes returns '4 hours', etc...
    """

    timeDiff = newer - older
    days = timeDiff.days
    hours = timeDiff.seconds/3600
    minutes = timeDiff.seconds%3600/60
    seconds = timeDiff.seconds%3600%60

    str = ""
    tStr = ""
    if days > 0:
        if days == 1:   tStr = "day"
        else:           tStr = "days"
        str = str + "%s %s" %(days, tStr)
        return str
    elif hours > 0:
        if hours == 1:  tStr = "hour"
        else:           tStr = "hours"
        str = str + "%s %s" %(hours, tStr)
        return str
    elif minutes > 0:
        if minutes == 1:tStr = "min"
        else:           tStr = "mins"           
        str = str + "%s %s" %(minutes, tStr)
        return str
    elif seconds > 0:
        if seconds == 1:tStr = "sec"
        else:           tStr = "secs"
        str = str + "%s %s" %(seconds, tStr)
        return str
    else:
        return None

older = datetime.strptime('Mon Jun 28 10:51:07 2010', '%a %b %d %H:%M:%S %Y')
newer = datetime.strptime('Tue Jun 28 10:52:07 2010', '%a %b %d %H:%M:%S %Y')
print date_diff(older, newer)

这个时间代码片段的原始来源

6
#!/usr/bin/env python

import datetime

def hrdd(d1, d2):
    """
    Human-readable date difference.
    """
    _d1 = datetime.datetime.strptime(d1, "%a %b %d %H:%M:%S %Y")
    _d2 = datetime.datetime.strptime(d2, "%a %b %d %H:%M:%S %Y")
    diff = _d2 - _d1
    return diff.days # <-- alternatively: diff.seconds 

if __name__ == '__main__':
    d1 = "Mon Jun 28 10:51:07 2010"
    d2 = "Fri Jun 18 10:18:43 2010"
    d3 = "Wed Dec 15 09:18:43 2010"

    print hrdd(d1, d2)
    # ==> -11
    print hrdd(d2, d1)
    # ==> 10
    print hrdd(d1, d3)
    # ==> 169
    # ...

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答