减去不同格式的日期并转换为Int

时间:2014-12-24 20:33:04

标签: python python-2.7 datetime

我之前问了一个类似的问题,得到了一些很好的反馈。我将几个答案结合起来得出一个解决方案,但效果似乎非常低效。我正在寻找一种更好的方法来获取变量(ts)和今天之间的整数天的总天数。

我的代码:

import datetime
ts = '2015-03-01T17:09:00.000+0000'
ts = ts[:10]
f = '%Y-%m-%d'
date_from_sql = datetime.datetime.strptime(ts, f)
now = datetime.datetime.now()
now = str(now)
now = now[:10]
now = datetime.datetime.strptime(str(now), f)
delta = date_from_sql - now
print delta.total_seconds()/(3600*24)

输出:

67.0

3 个答案:

答案 0 :(得分:4)

不需要

delta.total_seconds()/(3600*24),只需使用.days

即可
from datetime import datetime
now = datetime.now()
ts = '2015-03-01T17:09:00.000+0000'
ts = ts[:10]
f = '%Y-%m-%d'
date_from_sql = datetime.strptime(ts, f)
print(date_from_sql - now).days

如果您不想花时间考虑使用日期:

now = datetime.now().date()
ts = '2015-03-01T17:09:00.000+0000'
ts = ts[:10]
f = '%Y-%m-%d'
date_from_sql = datetime.strptime(ts, f).date()
print(date_from_sql - now).days

如果日期字符串可能采用不同的格式,您可能需要dateutil

from dateutil import parser

now = datetime.now().date()
ts = '2015-03-01T17:09:00.000+0000'
ts = parser.parse(ts).date()
print(ts - now).days

答案 1 :(得分:1)

@Padraic,是的,我的解决方案也一样,

from datetime import datetime
ts = '2015-03-01T17:09:00.000+0000'
print "days:-", (datetime.strptime(ts[:10], '%Y-%m-%d').date() - datetime.now().date()).days    

答案 2 :(得分:0)

如果你不关心一天中的时间(和时区),即结果有一天的分辨率;您可以使用datetime.date类和.toordinal()方法获取天数:

from datetime import date

ts = '2015-03-01T17:09:00.000+0000'
date_from_sql = date(*map(int, ts[:10].split('-')))
print(date_from_sql.toordinal() - date.today().toordinal())
# -> 66