【问题标题】:What is the simplest way to find the difference between 2 times in python?在python中找到2次之间差异的最简单方法是什么?
【发布时间】:2010-09-08 05:42:39
【问题描述】:

我有 2 个时间值,其类型为 datetime.time。我想找出他们的不同之处。显而易见的事情是 t1 - t2,但这不起作用。它适用于datetime.datetime 类型的对象,但不适用于datetime.time。那么最好的方法是什么?

【问题讨论】:

    标签: python datetime time


    【解决方案1】:

    您可以将两者转换为 timedelta objects 并将它们相互减去,这将处理结转。例如:

    >>> import datetime as dt
    >>> t1 = dt.time(23, 5, 5, 5)
    >>> t2 = dt.time(10, 5, 5, 5)
    >>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
    >>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
    >>>  print(dt1-dt2)
    13:00:00
    >>> print(dt2-dt1)
    -1 day, 11:00:00
    >>> print(abs(dt2-dt1))
    13:00:00
    

    Python 中的负 timedelta 对象得到一个负的 day 字段,而其他字段为正。您可以事先检查:比较适用于时间对象和 timedelta 对象:

    >>> dt2 < dt1
    True
    >>> t2 < t1
    True
    

    【讨论】:

    • chryss:这里有一个例子,你真的可以做得很好。
    【解决方案2】:

    Environment.TickCount 如果您需要一些快速的东西,似乎效果很好。

    int start = Environment.TickCount

    ...DoSomething()

    int elapsedtime = Environment.TickCount - 开始

    乔恩

    【讨论】:

      【解决方案3】:

      以毫秒为单位检索时间,然后进行减法。

      【讨论】:

        【解决方案4】:

        Python 有 pytz (http://pytz.sourceforge.net) 模块,可用于“时间”对象的算术运算。它也处理 DST 偏移量。上面的页面有很多例子说明了 pytz 的用法。

        【讨论】:

        【解决方案5】:

        也有点傻,但您可以尝试选择任意一天并将每次嵌入其中,使用datetime.datetime.combine,然后减去:

        >>> import datetime
        >>> t1 = datetime.time(2,3,4)
        >>> t2 = datetime.time(18,20,59)
        >>> dummydate = datetime.date(2000,1,1)
        >>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
        datetime.timedelta(0, 58675)
        

        【讨论】:

          【解决方案6】:

          首先,请注意 datetime.time 是一天中的时间,独立于给定的一天,因此任何两个 datetime.time 值之间的差异将小于 24 小时。

          一种方法是将两个 datetime.time 值转换为可比较的值(例如毫秒),然后找出差异。

          t1, t2 = datetime.time(...), datetime.time(...)
          
          t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
          t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond
          
          delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])
          

          这有点蹩脚,但它有效。

          【讨论】:

          • 请注意,此解决方案不保留符号。此外,delta_ms = abs(t1_ms - t2_ms) 更容易理解,并且至少节省了一个减法。
          • 如果 t1_ms 在午夜之前而 t2_ms 在午夜之后则不起作用
          • 不应该是*1000000吗?因为 1 s = 1000000 µs。
          【解决方案7】:

          这似乎不受支持,因为在 datetime.time 中没有处理溢出的好方法。我知道这不是直接的答案,但也许比我有更多 python 经验的人可以更进一步。欲了解更多信息,请参阅:http://bugs.python.org/issue3250

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多