Python减去两个日期字符串

时间:2012-11-08 16:15:24

标签: python string subtraction

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

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

我需要执行:end_date - start_date 它应该返回分隔结束日期和开始日期的秒数。

此数据来自twitter api。这就是json给我的。由于它看起来像一个常用的字符串,我假设有一个库或方法可以处理这个。我只是找不到一个。谢谢!

7 个答案:

答案 0 :(得分:11)

以下是完整的答案:

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

答案 1 :(得分:3)

你看起来有多难?

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

以下是示例代码:

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是否适合您。

答案 2 :(得分:2)

使用datetime.strptime方法将字符串转换为datetime对象。您可以在此处找到所需的格式:http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

在你的情况下:

  

%Locale缩写的工作日名称。
  %b Locale的缩写月份名称   %d日期的十进制数[01,31]   %H小时(24小时制)作为十进制数[00,23]   %M分钟为十进制数[00,59]   %S秒作为十进制数[00,61]   %Y年份,世纪为十进制数   %z UTC格式的偏移量为+ HHMM或-HHMM(如果对象是天真的,则为空字符串)。

答案 3 :(得分:2)

查看日期时间模块(http://docs.python.org/2/library/datetime.html) 它有各种日期操作的方法

答案 4 :(得分:2)

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

详细信息:http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

然后您可以减去datetime个对象并获得timedelta个对象。

或者,您可以使用Twitter开发者页面上列出的一个Python Twitter API包装器,它可能会为您进行转换:https://dev.twitter.com/docs/twitter-libraries#python

答案 5 :(得分:1)

您可以使用datetime.datetime.strptime()解析日期,然后可以进行算术处理吗?

答案 6 :(得分:0)

来自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)
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)