9

我有两个包含日期的字符串,像这样”

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给我的。由于它似乎是一个常用的字符串,我假设有一个库或方法可以处理这个问题。我只是找不到一个。谢谢!

4

7 回答 7

18

这是完整的答案:

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
于 2012-11-08T16:25:00.123 回答
4

你看起来有多努力?

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

于 2012-11-08T16:18:19.550 回答
2

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

在你的情况下:

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

于 2012-11-08T16:19:30.463 回答
2

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

于 2012-11-08T16:19:33.540 回答
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

于 2012-11-08T16:21:17.773 回答
1

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

于 2012-11-08T16:19:38.017 回答
1

从日期时间导入日期时间

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)
于 2016-05-25T20:52:54.407 回答