Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中两个日期之间的差异_Python_Date - Fatal编程技术网

Python中两个日期之间的差异

Python中两个日期之间的差异,python,date,Python,Date,我有两个不同的日期,我想知道它们之间的天数差异。日期的格式为YYYY-MM-DD 我有一个函数,可以将给定的数字与日期相加或相减: def addonDays(a, x): ret = time.strftime("%Y-%m-%d",time.localtime(time.mktime(time.strptime(a,"%Y-%m-%d"))+x*3600*24+3600)) return ret 其中A是日期,x是我要添加的天数。结果是另一个日期 我需要一个函数,其

我有两个不同的日期,我想知道它们之间的天数差异。日期的格式为YYYY-MM-DD

我有一个函数,可以将给定的数字与日期相加或相减:

def addonDays(a, x):
   ret = time.strftime("%Y-%m-%d",time.localtime(time.mktime(time.strptime(a,"%Y-%m-%d"))+x*3600*24+3600))      
   return ret
其中A是日期,x是我要添加的天数。结果是另一个日期


我需要一个函数,其中我可以给出两个日期,结果将是一个以天为单位的日期差的整数。

使用
-
获取两个
日期时间
对象之间的差,并取
成员

from datetime import datetime

def days_between(d1, d2):
    d1 = datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.strptime(d2, "%Y-%m-%d")
    return abs((d2 - d1).days)

我尝试了上面larsmans发布的代码,但有几个问题:

1) 代码将抛出Maugurera提到的错误 2) 如果将代码更改为以下内容:

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)
import datetime

end_date = datetime.datetime.utcnow()
start_date = end_date - datetime.timedelta(days=8)
difference_in_days = abs((end_date - start_date).days)

print difference_in_days
这会将datetime对象转换为字符串,但有两件事

1) 尝试执行d2-d1将失败,因为您无法对字符串和 2) 如果您阅读了上面答案的第一行,您希望在两个datetime对象上使用-运算符,但您只是将它们转换为字符串

我发现你实际上只需要以下几点:

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)
import datetime

end_date = datetime.datetime.utcnow()
start_date = end_date - datetime.timedelta(days=8)
difference_in_days = abs((end_date - start_date).days)

print difference_in_days

另一个简短的解决方案:

from datetime import date

def diff_dates(date1, date2):
    return abs(date2-date1).days

def main():
    d1 = date(2013,1,1)
    d2 = date(2013,9,13)
    result1 = diff_dates(d2, d1)
    print '{} days between {} and {}'.format(result1, d1, d2)
    print ("Happy programmer's day!")

main()
试试这个:

data=pd.read_csv('C:\Users\Desktop\Data Exploration.csv')
data.head(5)
first=data['1st Gift']
last=data['Last Gift']
maxi=data['Largest Gift']
l_1=np.mean(first)-3*np.std(first)
u_1=np.mean(first)+3*np.std(first)


m=np.abs(data['1st Gift']-np.mean(data['1st Gift']))>3*np.std(data['1st Gift'])
pd.value_counts(m)
l=first[m]
data.loc[:,'1st Gift'][m==True]=np.mean(data['1st Gift'])+3*np.std(data['1st Gift'])
data['1st Gift'].head()




m=np.abs(data['Last Gift']-np.mean(data['Last Gift']))>3*np.std(data['Last Gift'])
pd.value_counts(m)
l=last[m]
data.loc[:,'Last Gift'][m==True]=np.mean(data['Last Gift'])+3*np.std(data['Last Gift'])
data['Last Gift'].head()

pd.date\u range('2019-01-01','2019-02-01')。shape[0]

我尝试了一些代码,但最终使用了一些简单的代码(在Python 3中):

如果开始日期时间和结束日期时间列的格式为
datetime64[ns]
格式,则datetime会理解它,并返回天数+时间戳的差值,即
timedelta64[ns]
格式

如果只想看到天数的差异,可以使用(也适用于时间部分)仅分隔开始日期时间和结束日期时间的日期部分:

然后运行:

df['difference_in_days'] = abs(df['end_date'] - df['start_date'])
您可以使用第三方库,它是内置
日期时间
的扩展

使用模块解析日期非常简单:

from dateutil import parser

date1 = parser.parse('2019-08-01')
date2 = parser.parse('2019-08-20')

diff = date2 - date1

print(diff)
print(diff.days)


根据

中的答案回答。答案很好。要明确的是,
(d2-d1)
的结果将是一个对象。我在控制台上有一个错误:键入对象“datetime.datetime”没有属性“strtime”我得到TypeError:“int”对象在我尝试对timedelta对象执行.days()操作时是不可调用的,文档也没有提到它()。请您也提一下好吗?我认为这很重要,因为这是我在不看文档的情况下尝试
seconds
时期望得到的结果。@他们让d2和d1正好分开一天,看看这是否是你期望的;-)我的代码使用
datetime.strtime
将字符串转换为
datetime
对象。因为OP声明“日期的格式是YYYY-MM-DD”,所以我假设日期表示为字符串。如果不是,则显然不需要进行转换。
diff\u dates
函数中的
If
不是完全没有必要吗?根据绝对值的定义,
abs(date1-date2)
将始终等于
abs(date2-date1)
。至少在Python3.5中,print语句应该是这样的:print({}和{}之间的{}天)。format(result1,d1,d2))注意addonDays函数将在DST天失败。你是对的。我已经修改了这个函数。如果你加上3600(一小时)就行了。请以某种方式更正答案,以恢复否决票的声誉。建议一些没有“熊猫”的东西