在Python中使用字符串日期计算天数

在Python中使用字符串日期计算天数,python,string,datetime,python-2.7,Python,String,Datetime,Python 2.7,我有当前字符串格式的日期:“Tue Feb 19 00:09:28+1100 2013” 我试图计算字符串中的日期与当前日期之间经过了多少天 我已经能够将字符串转换为日期 import time day = time.strptime('Tue Feb 19 00:09:28 +1100 2013', '%a %b %d %H:%M:%S +1100 %Y') 请改用datetime模块: import datetime day = datetime.datetime.strptime('Tu

我有当前字符串格式的日期:“Tue Feb 19 00:09:28+1100 2013”

我试图计算字符串中的日期与当前日期之间经过了多少天

我已经能够将字符串转换为日期

import time
day = time.strptime('Tue Feb 19 00:09:28 +1100 2013', '%a %b %d %H:%M:%S +1100 %Y')
请改用datetime模块:

import datetime
day = datetime.datetime.strptime('Tue Feb 19 00:09:28 +1100 2013', '%a %b %d %H:%M:%S +1100 %Y')
delta = day - datetime.datetime.now()
print delta.days
减去两个datetime.datetime值将返回datetime.timedelta对象,该对象具有days属性

您的字符串确实包含时区偏移量,并且您将其硬编码为匹配;如果值不同,则必须使用能够处理偏移量的解析器。包括一个优秀的解析器和时区支持来处理此问题:

>>> from dateutil import parser
>>> parser.parse('Tue Feb 19 00:09:28 +1100 2013')
datetime.datetime(2013, 2, 19, 0, 9, 28, tzinfo=tzoffset(None, 39600))
请注意,由于此结果包括时区,因此在使用日期算法时,现在需要使用时区感知的datetime对象:

>>> from dateutil import tz
>>> import datetime
>>> utcnow = datetime.datetime.now(tz.tzutc())
>>> then = parser.parse('Tue Feb 19 00:09:28 +1100 2013')
>>> utcnow - then
datetime.timedelta(31, 12087, 617740)
>>> (utcnow - then).days
31
在上面的示例中,我在计算解析日期的时间之前,根据UTC时区创建了一个utcnow变量。

请改用datetime模块:

import datetime
day = datetime.datetime.strptime('Tue Feb 19 00:09:28 +1100 2013', '%a %b %d %H:%M:%S +1100 %Y')
delta = day - datetime.datetime.now()
print delta.days
减去两个datetime.datetime值将返回datetime.timedelta对象,该对象具有days属性

您的字符串确实包含时区偏移量,并且您将其硬编码为匹配;如果值不同,则必须使用能够处理偏移量的解析器。包括一个优秀的解析器和时区支持来处理此问题:

>>> from dateutil import parser
>>> parser.parse('Tue Feb 19 00:09:28 +1100 2013')
datetime.datetime(2013, 2, 19, 0, 9, 28, tzinfo=tzoffset(None, 39600))
请注意,由于此结果包括时区,因此在使用日期算法时,现在需要使用时区感知的datetime对象:

>>> from dateutil import tz
>>> import datetime
>>> utcnow = datetime.datetime.now(tz.tzutc())
>>> then = parser.parse('Tue Feb 19 00:09:28 +1100 2013')
>>> utcnow - then
datetime.timedelta(31, 12087, 617740)
>>> (utcnow - then).days
31

在上面的示例中,在计算解析日期的时间之前,我根据UTC时区创建了一个utcnow变量。

这太棒了。它在列表中的一半有效。然后我遇到了这样的情况:周二9月28日11:06:40+1000 2010'。年份之前的数字与示例中的字符串不同。日期的这一部分是否有字符串格式化程序?@TDNS:这是时区偏移量,Python不支持不捆绑时区支持。您必须使用外部模块来解析该部分;有一个很好的解析器。@TDNS:没问题,我的答案也扩展到了时区处理。你就是Martijn。谢谢你在这个问题上和我之前的问题上的帮助。嘿,Martijn,我在这里发布了我的hack:任何洞察都会有帮助。谢谢,这太好了。它在列表中的一半有效。然后我遇到了这样的情况:周二9月28日11:06:40+1000 2010'。年份之前的数字与示例中的字符串不同。日期的这一部分是否有字符串格式化程序?@TDNS:这是时区偏移量,Python不支持不捆绑时区支持。您必须使用外部模块来解析该部分;有一个很好的解析器。@TDNS:没问题,我的答案也扩展到了时区处理。你就是Martijn。谢谢你在这个问题上和我之前的问题上的帮助。嘿,Martijn,我在这里发布了我的hack:任何洞察都会有帮助。谢谢