【问题标题】:python - get difference between two times [duplicate]python - 获得两次之间的差异[重复]
【发布时间】:2021-05-15 00:47:43
【问题描述】:

我今天有一个简单的问题。我想获取两个日期之间的差异并检查差异是否约为 5 分钟。

我发现了一个获取差异的问题,要检查一下。

我将同一日期与相差几分钟的日期进行比较,结果显示相差 -1 天?这对我来说没有意义。

如果需要,请自行测试。

比较日期:

Date1: 2021-05-15 00:38:57.244000
Date2: 2021-05-15 02:40:42.245693

打印出来的区别是:

Diff: -1 day, 21:58:14.998307

那么为什么是 -1 天呢?差异不应该只是~2小时吗?获得两个日期之间差异的最佳方法是什么? 正如我所说,我想检查差异是否小于(或等于)5 分钟。如果日期每次都不同,这怎么可能?

重要信息:日期总是不同,因为我检查帐户创建日期。

我使用这段代码来做出改变:

diff = date1 - date2

【问题讨论】:

  • 如果你这样做date2 - date1怎么办?
  • 日期总是不同,因为我检查帐户创建日期。
  • date2 晚于 date1,因此 date1 - date2 为负数。你不想要date2 - date1 吗?
  • @JohnGordon 因为我比较了帐户创建日期,所以 date1 或 date2 每次都可能不同。它可以是 2018 年或 2021 年的日期,也可以是 date2。我只是想要一种方法来检查两个日期之间的差异是否小于(或等于)5 分钟。
  • 比较日期看哪个更小,然后相应地减去。

标签: python python-3.x datetime python-datetime


【解决方案1】:

这个问题可以通过对两个日期对象进行排序来解决,这样差异比较总是返回一个正数。然后您可以使用 timedelta 对象来检查差异是否小于 5 分钟。

from datetime import datetime, timedelta

# Define dates as datetime objects
Date1 = datetime.fromisoformat("2021-05-15 00:38:57.244000")
Date2 = datetime.fromisoformat("2021-05-15 02:40:42.245693")

# Define 5 minutes as a timedelta object
five_minute_duration = timedelta(minutes=5)

通过从较新的日期中减去较旧的日期来比较两个日期。结果将是一个 timedelta 对象。

diff = Date2 - Date1

如果您不确定哪个日期对象更老更年轻,您可以对它们进行排序。这将使比较稳定并防止意外的负时间增量。

dates_sorted = sorted([Date2, Date1])
diff = dates_sorted[1] - dates_sorted[0]

以小时为单位的差异。在此示例中,持续时间为 2.029... 小时。

diff.total_seconds() / (60 * 60)

检查差异是否小于或等于 5 分钟的持续时间。

if diff <= five_minute_duration:
    print("Yes")
else:
    print("No")

【讨论】:

    【解决方案2】:

    您可以在减法运算之前进行比较运算。示例如下所示。

    from datetime import datetime
    
    dt1 = datetime(2020, 4, 19, 12, 20)
    dt2 = datetime(2020, 4, 21, 15, 2)
    
    def get_date_diff(date1, date2):
        diff = date2 - date1 if date1 < date2 else date1 - date2
        return diff
    
    def test():
        print (get_date_diff(dt1, dt2))
    
    test()
    

    【讨论】:

      【解决方案3】:

      通过为允许的差异创建两个具有正值和负值的时间增量来创建上限和下限

      lower = timedelta(minutes=-5)
      upper = timedelta(minutes=5)
      

      然后检查日期时间之间的差异是否在这些范围内

      lower < date1 - date2 < upper
      

      这种方法的优点是,如果多次进行这种比较,lowerupper 可以只创建一次,并且不必对日期时间进行排序

      【讨论】:

        猜你喜欢
        • 2014-05-14
        • 2011-06-01
        • 2016-04-01
        • 2015-02-22
        • 2018-05-19
        • 1970-01-01
        • 2022-11-24
        • 2020-01-09
        • 1970-01-01
        相关资源
        最近更新 更多