【问题标题】:Not understanding datetime delta in Python不了解 Python 中的日期时间增量
【发布时间】:2019-01-08 19:54:27
【问题描述】:

from datetime import datetime as dt

我有 2 个日期时间字段

dt.now() 返回2019-01-08 11:46:26.035303 这是太平洋标准时间

x 是我的数据集

x['CreatedDate'] 返回 2019-01-08T20:35:47.000+0000

dt.strptime(x['CreatedDate'.split('.')[0],'%Y-%m-%dT%H:%M:%S)) - datetime.timedelta(hours=8) 返回2019-01-08 08:43:33

我减去这两个, tdelta = dt.now() - (dt.strptime(x['CreatedDate'.split('.')[0],'%Y-%m-%dT%H:%M:%S)) - datetime.timedelta(hours=8)) 这是 2019-01-08 11:46:26.035303 - 2019-01-08 08:43:33

差异应该是〜3小时,但我得到的结果是-1 day, 11:02:53.039790 -13H 12M 53S

我对返回的内容感到困惑。

【问题讨论】:

  • 我看不出这段代码是如何工作的,因为您的格式字符串 %Y-%m-%dT%H:%M:%S 包含一个 T 分隔日期和小时字段,但您的日期字符串 2019-01-08 08:43:33 没有 @987654330 @。您的日期字符串也有微秒作为最后一个字段,但您的日期格式没有该字段。
  • 如果您发布的代码显示了如何分配日期时间变量以及如何减去它们,这可能很容易解决。例如,x = datetime.now()y = datetime.strptime('2019-01-08 08:43:33','%Y-%m-%d %H:%M:%S')diff = x - y

标签: python datetime python-datetime


【解决方案1】:

免责声明

我很难制作您制作的 datetime 对象。因此,我的回答不会直接解决您的确切问题。

我的代码中没有定义x。如果你提供它,我可以调整我的答案更具体。

回答

但是如果你使用这个代码:

import datetime as dt

first_time = dt.datetime(2019, 1, 8, 8, 43, 33) #This is a good way to make a datetime object

要制作您的日期时间对象,下面的代码将进行正确的计算并为您有效地打印出来:

second_time = dt.datetime.now() 
my_delta = first_time - second_time
print("Minutes: " + str(my_delta.total_seconds()/60))
print("Hours: " + str(my_delta.total_seconds()/3600))
print("Days: " + str(my_delta.total_seconds()/3600/24))

注意

dt.datetime 在这里需要(年、月、日、小时、分钟、秒),但dt.datetime.now() 也在用微秒(年、月、日、小时、分钟、秒、微秒)制作。该函数可以处理被赋予不同的时间特性而不会出错。

注2

如果您执行 print(my_delta) 并得到类似:-1 day, 16:56:54.481901 如果您的差异是 Hours: -7.051532805277778,这将等同于您的差异这是因为 24-16.95 = -7.05

【讨论】:

    【解决方案2】:

    问题在于 datetime.timedelta(hours=8) 的减法,我将其从 dt.now 更改为 dt.utcnow() 中删除,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多