在Python中对datetime进行计算

时间:2013-12-12 07:47:02

标签: python datetime python-3.x

我一直在尝试以下日期和时间操作:

import datetime
a = datetime.datetime.strptime("1899-12-30 19:45:00", "%Y-%m-%d %H:%M:%S")
b = datetime.datetime.strptime("1899-12-30 12:42:00", "%Y-%m-%d %H:%M:%S") 
print (a-b)
print (a/b)

a-b工作超级,但是a / b崩溃:TypeError:不支持的操作数类型为/:'datetime.datetime'和'datetime.datetime'

关于如何计算日期和时间价值之间关系的任何想法?我是否需要明确地首先计算每个变量a和b中的秒数,或者是否有较短的捷径?

如果我需要计算秒数。我该怎么做?我试过了

s = a.total_seconds()
which gives: AttributeError: 'datetime.datetime' object has no attribute 'total_seconds'

(我正在使用Python 3.3)

3 个答案:

答案 0 :(得分:5)

你必须区分datetime.datetime(这是一个实际的日期和时间,例如“1899-12-30 19:45:00”)和datetime.timedelta(这是一个时期) ,例如“1小时”)。 请注意,a-b两个日期时间的减​​法将导致timedelta。

如果你正在计算比赛时间,你必须指定比赛的开始时间(无论如何,你怎么知道比赛的持续时间)。然后就可以了

import datetime
start = datetime.datetime.strptime("1899-12-30 12:00:00", "%Y-%m-%d %H:%M:%S") # whatever the start time is
a = datetime.datetime.strptime("1899-12-30 19:45:00", "%Y-%m-%d %H:%M:%S")
b = datetime.datetime.strptime("1899-12-30 12:42:00", "%Y-%m-%d %H:%M:%S") 
print (a-b)  # it will give you the timedelta difference between racer "a" and racer "b" 
print (a-start).total_seconds()/(b-start).total_seconds() # it will give you the ratio between "a" and "b" race times

未定义日期时间。但是timedelta对象有total_seconds(),它给你一个数字(以秒为单位的周期长度),你可以划分数字。

答案 1 :(得分:0)

从零日期开始的秒数:

x = datetime.datetime(1, 1, 1, 0, 0)

print (a-x).total_seconds()

答案 2 :(得分:0)

datetime.timedelta支持鸿沟的运作方式如manual

所示

所以,我认为你应该这样做:

  1. Minuse datetime.datetime.min a_interval = a - datetime.datetime.minb_interval = b - datetime.datetime.min
  2. 开始计算:print(a_interval - b_interval)print(a_interval / b_interval)
  3. 我希望这可以帮到你