Python减去两个日期字符串

Python减去两个日期字符串,python,string,subtraction,Python,String,Subtraction,我有两个字符串包含这样的日期“ 我需要执行:结束日期-开始日期 它应该返回结束日期和开始日期之间的间隔秒数 这些数据是从twitter api中提取的。这是json给我的。因为它看起来像是一个常用的字符串,所以我假设有一个库或方法可以处理它。我只是找不到。谢谢!你怎么看 Python的模块将解析此格式,并允许您对生成的对象执行算术运算 下面是示例代码: a = datetime.datetime.strptime("Sun Sep 16 16:05:15 +0000 2012", "%a %b

我有两个字符串包含这样的日期“

我需要执行:
结束日期-开始日期
它应该返回结束日期和开始日期之间的间隔秒数

这些数据是从twitter api中提取的。这是json给我的。因为它看起来像是一个常用的字符串,所以我假设有一个库或方法可以处理它。我只是找不到。谢谢!

你怎么看

Python的模块将解析此格式,并允许您对生成的对象执行算术运算

下面是示例代码:

a = datetime.datetime.strptime("Sun Sep 16 16:05:15 +0000 2012", "%a %b %d %H:%M:%S +0000 %Y")

请注意,在Windows中(我尝试了上述操作),似乎不支持
%z
指令,这就是为什么
+0000
部分是硬编码的。如果您希望使用此部分(UTC偏移量)若要更改,您需要在单独的步骤中处理,除非您可以验证
%z
是否适合您。

使用datetime.strtime方法将字符串转换为datetime对象。您可以在此处找到所需的格式:

就你而言:

%区域设置的缩写工作日名称。
%b区域设置的缩写月份名称。
%d以十进制数字[01,31]表示的月份日期。
%小时(24小时制)作为十进制数字[00,23]。
%M分钟作为十进制数字[00,59]。
%秒作为十进制数[00,61]。
%以世纪为十进制数的Y年。
%z UTC偏移量的形式为+HHMM或-HHMM(如果对象为原始对象,则为空字符串)

查看日期时间模块()
它有各种类型的日期操作方法。

您可以使用datetime.datetime.StrTime()解析日期,然后您可以进行算术操作。

使用
datetime.StrTime()
根据格式代码解析字符串。在您的情况下,格式类似于
%a%b%d%H:%M:%S%z%Y
。(注意:我没有测试这种解析格式。)

详情:

然后可以减去
datetime
对象,得到
timedelta
对象


或者,您可以使用Twitter开发者页面上列出的Python Twitter API包装器之一,它可能会为您进行转换:

以下是完整答案:

from datetime import datetime

start_date = 'Sun Sep 16 16:05:15 +0000 2012'
end_date = 'Sun Sep 17 23:55:20 +0000 2012'


def __datetime(date_str):
    return datetime.strptime(date_str, '%a %b %d %H:%M:%S +0000 %Y')

start = __datetime(start_date)
end = __datetime(end_date)

delta = end - start
print delta  # prints: 1 day, 7:50:05
print delta.total_seconds()  # prints: 114605.0

从日期时间导入日期时间

start_date = 'Sun Sep 16 16:05:15 +0000 2012'
end_date = 'Sun Sep 17 23:55:20 +0000 2012'


def __datetime(date_str):
    return datetime.strptime(date_str, '%a %b %d %H:%M:%S +0000 %Y')

start = __datetime(start_date)
end = __datetime(end_date)

delta = end - start
print(delta)
print(delta.total_seconds())

hours = (delta.total_seconds())/3600

print("Hours %s" % hours)

minutes = (delta.total_seconds())//3600

print("minutes %s" % minutes)
print(divmod(delta.total_seconds(), 3600))

h, m = divmod(delta.total_seconds(), 3600)

print(h)
print(m)

M, s = divmod(m, 60)
print(M)
print(s)

是不是
datetime.datetime.strtime()
?您的解决方案没有返回正确的写入秒数。您需要将每天的秒数添加到delta.seconds。总秒数是((delta.days*86500)+delta.seconds)您是对的!我将代码更改为使用.total_seconds()方法
start_date = 'Sun Sep 16 16:05:15 +0000 2012'
end_date = 'Sun Sep 17 23:55:20 +0000 2012'


def __datetime(date_str):
    return datetime.strptime(date_str, '%a %b %d %H:%M:%S +0000 %Y')

start = __datetime(start_date)
end = __datetime(end_date)

delta = end - start
print(delta)
print(delta.total_seconds())

hours = (delta.total_seconds())/3600

print("Hours %s" % hours)

minutes = (delta.total_seconds())//3600

print("minutes %s" % minutes)
print(divmod(delta.total_seconds(), 3600))

h, m = divmod(delta.total_seconds(), 3600)

print(h)
print(m)

M, s = divmod(m, 60)
print(M)
print(s)