পাইথনে দুটি তারিখের মধ্যে পার্থক্য


137

আমার দুটি পৃথক তারিখ রয়েছে এবং আমি তাদের মধ্যে দিনের পার্থক্য জানতে চাই। তারিখের ফর্ম্যাটটি 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 হ'ল তারিখ এবং আমি সংখ্যা যুক্ত করতে চাই তার সংখ্যা। এবং ফলাফল অন্য তারিখ।

আমার একটি ফাংশন প্রয়োজন যেখানে আমি দুটি তারিখ দিতে পারি এবং ফলাফলগুলি তারিখের সাথে পার্থক্য সহ কিছুটা ঘটে।



মনে রাখবেন যে আপনার অ্যাডনডয়েস ফাংশনটি ডিএসটি দিনে ব্যর্থ হবে।
ফিশিনিয়ার

তুমি ঠিক. আমি ইতিমধ্যে ফাংশনটি পরিবর্তন করেছি। আপনি যদি 3600 যোগ করেন (এক ঘন্টা) কাজ করবে।
মাগুয়েরা

উত্তর:


270

ব্যবহার করুন -দুই এর মধ্যে পার্থক্য পেতে datetimeবস্তু এবং নিতে daysসদস্য।

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)

37
দুর্দান্ত উত্তর। স্পষ্ট করে বলতে গেলে, ফলাফলটি (d2 - d1)একটি timedeltaবস্তু হবে।
aganders3

কনসোলে আমার এই ত্রুটি রয়েছে: টাইপ অবজেক্ট 'ডেটটাইম.ডেটটাইম' এর কোনও 'অ্যাট্রিপটাইম' নেই
মাগুয়েরা

2
আমি টাইপআরার পেয়েছি: 'টাইমডেল্টা অবজেক্টে .days () করার চেষ্টা করার পরে' ইন্ট 'অবজেক্ট কল করা যায় না এবং ডকুমেন্টেশনে এটির কোনও উল্লেখ করা হয় না ( ডকস.পিথথন.আর . / 2 / লাইবারি / ডেটটাইমHtml )।
ব্যবহারকারী 1761806

4
আপনি দয়া করে উল্লেখ total_secondsকরতে পারেন? আমি মনে করি এটি গুরুত্বপূর্ণ যেমন আমি যখন ডক্সটি secondsনা পড়ে চেষ্টা করেছি তখন এটিই প্রত্যাশা মতো হয়েছিল ।
মার্টিন থোমা

1
@ দ্যাজকিরান একদিন ডি 2 এবং ডি 1 কে আলাদা করুন এবং দেখুন যা আপনি প্রত্যাশা করেন কি এটি ;-)
মার্টিন থোমা

27

আরেকটি সংক্ষিপ্ত সমাধান:

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()

3
নন ifমধ্যে diff_datesসম্পূর্ণরূপে অপ্রয়োজনীয় ফাংশন আছে? পরম মানের সংজ্ঞা দ্বারা, abs(date1-date2)সর্বদা সমান হবে abs(date2-date1)
ব্ল্যাকঙ্কহট

কমপক্ষে পাইথন ৩.৫ এর সাথে মুদ্রণ বিবৃতিটি দেখতে হবে: মুদ্রণ ('{} থেকে {} between between' এর মধ্যে ফর্ম্যাট (ফলাফল 1, ডি 1, ডি 2))
আর্নেস্তাস কার্ডজিস

2

আমি উপরের লারসম্যানদের দ্বারা পোস্ট করা কোডটি চেষ্টা করেছি তবে, বেশ কয়েকটি সমস্যা রয়েছে:

১) মাগুয়েরার বর্ণিত কোডটি ত্রুটি ছুঁড়ে ফেলবে 2) আপনি যদি কোডটি নিম্নলিখিতটিতে পরিবর্তন করেন:

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

এটি আপনার ডেটটাইম অবজেক্টগুলিকে স্ট্রিংগুলিতে রূপান্তর করবে তবে দুটি জিনিস

1) ডি 2 - ডি 1 করার চেষ্টা করা ব্যর্থ হবে কারণ আপনি স্ট্রিংয়ে বিয়োগ অপারেটরটি ব্যবহার করতে পারবেন না এবং 2) উপরের উত্তরের প্রথম লাইনের বিবরণে যদি এটি পড়ে থাকে তবে আপনি দুটি ডেটটাইম অবজেক্টে অপারেটরটি ব্যবহার করতে চান তবে, আপনি কেবল এগুলিকে স্ট্রিংয়ে রূপান্তরিত করুন

আমি যা পেয়েছি তা হ'ল আপনার আক্ষরিকভাবে কেবল নিম্নলিখিতগুলির প্রয়োজন:

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

1
আমার কোড datetime.strptimeস্ট্রিংকে datetimeঅবজেক্টে রূপান্তর করতে ব্যবহার করে। যেহেতু ওপি জানিয়েছে যে "তারিখের ফর্ম্যাটটি ওয়াইওয়াইওয়াই-এমএম-ডিডি", তাই আমি ধরেছিলাম তারিখগুলি স্ট্রিং হিসাবে উপস্থাপিত হয়েছিল were যদি তারা না হয় তবে অবশ্যই কোনও রূপান্তরের দরকার নেই।
ফ্রেড ফু

0

এটা চেষ্টা কর:

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()

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.