উত্তর:
আপনার যদি দুটি তারিখের অবজেক্ট থাকে তবে আপনি কেবল সেগুলি বিয়োগ করতে পারেন, যা কোনও timedelta
বস্তুর গণনা করে ।
from datetime import date
d0 = date(2008, 8, 18)
d1 = date(2008, 9, 26)
delta = d1 - d0
print(delta.days)
দস্তাবেজের সম্পর্কিত বিভাগ: https://docs.python.org/library/datetime.html ।
এই উদাহরণটি অন্য একটি উদাহরণের জন্য দেখুন ।
ডেটটাইমের শক্তি ব্যবহার:
from datetime import datetime
date_format = "%m/%d/%Y"
a = datetime.strptime('8/18/2008', date_format)
b = datetime.strptime('9/26/2008', date_format)
delta = b - a
print delta.days # that's it
date
এর নিজস্ব সমতুল্যের অভাব রয়েছে strptime()
।
strptime
format
ক্রিসমাস পর্যন্ত দিন:
>>> import datetime
>>> today = datetime.date.today()
>>> someday = datetime.date(2008, 12, 25)
>>> diff = someday - today
>>> diff.days
86
আরও গাণিতিক এখানে ।
আপনি ডেটটাইম মডিউলটি চান।
>>> from datetime import datetime, timedelta
>>> datetime(2008,08,18) - datetime(2008,09,26)
datetime.timedelta(4)
আরেকটি উদাহরণ:
>>> import datetime
>>> today = datetime.date.today()
>>> print(today)
2008-09-01
>>> last_year = datetime.date(2007, 9, 1)
>>> print(today - last_year)
366 days, 0:00:00
যেমন এখানে নির্দেশিত
delta = today - last_year
print(delta.days)
from datetime import datetime
start_date = datetime.strptime('8/18/2008', "%m/%d/%Y")
end_date = datetime.strptime('9/26/2008', "%m/%d/%Y")
print abs((end_date-start_date).days)
abs()
, যা দরকারী যখন তুলনা করা তারিখগুলি আগে অজানা থাকে এবং এটি আপনার আগ্রহী datetime.strptime(date, date)
তারতম্য। abs()
সমস্ত ইনপুট পরম করে তোলে (অর্থাত্ ইতিবাচক)।
এটি খুব সহজেই এর সাথে করা যায় arrow
:
import arrow
a = arrow.get('2017-05-09')
b = arrow.get('2017-05-11')
delta = (b-a)
print delta.days
রেফারেন্সের জন্য: http://arrow.readthedocs.io/en/latest/
শুধু খাঁটি কোড ব্যবহার না করে:
#Calculate the Days between Two Date
daysOfMonths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def isLeapYear(year):
# Pseudo code for this algorithm is found at
# http://en.wikipedia.org/wiki/Leap_year#Algorithm
## if (year is not divisible by 4) then (it is a common Year)
#else if (year is not divisable by 100) then (ut us a leap year)
#else if (year is not disible by 400) then (it is a common year)
#else(it is aleap year)
return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0
def Count_Days(year1, month1, day1):
if month1 ==2:
if isLeapYear(year1):
if day1 < daysOfMonths[month1-1]+1:
return year1, month1, day1+1
else:
if month1 ==12:
return year1+1,1,1
else:
return year1, month1 +1 , 1
else:
if day1 < daysOfMonths[month1-1]:
return year1, month1, day1+1
else:
if month1 ==12:
return year1+1,1,1
else:
return year1, month1 +1 , 1
else:
if day1 < daysOfMonths[month1-1]:
return year1, month1, day1+1
else:
if month1 ==12:
return year1+1,1,1
else:
return year1, month1 +1 , 1
def daysBetweenDates(y1, m1, d1, y2, m2, d2,end_day):
if y1 > y2:
m1,m2 = m2,m1
y1,y2 = y2,y1
d1,d2 = d2,d1
days=0
while(not(m1==m2 and y1==y2 and d1==d2)):
y1,m1,d1 = Count_Days(y1,m1,d1)
days+=1
if end_day:
days+=1
return days
# Test Case
def test():
test_cases = [((2012,1,1,2012,2,28,False), 58),
((2012,1,1,2012,3,1,False), 60),
((2011,6,30,2012,6,30,False), 366),
((2011,1,1,2012,8,8,False), 585 ),
((1994,5,15,2019,8,31,False), 9239),
((1999,3,24,2018,2,4,False), 6892),
((1999,6,24,2018,8,4,False),6981),
((1995,5,24,2018,12,15,False),8606),
((1994,8,24,2019,12,15,True),9245),
((2019,12,15,1994,8,24,True),9245),
((2019,5,15,1994,10,24,True),8970),
((1994,11,24,2019,8,15,True),9031)]
for (args, answer) in test_cases:
result = daysBetweenDates(*args)
if result != answer:
print "Test with data:", args, "failed"
else:
print "Test case passed!"
test()
সবাই তারিখটি ব্যবহার করে দুর্দান্ত উত্তর দিয়েছে, পান্ডাস ব্যবহার করে এর উত্তর দেওয়ার চেষ্টা করি
dt = pd.to_datetime('2008/08/18', format='%Y/%m/%d')
dt1 = pd.to_datetime('2008/09/26', format='%Y/%m/%d')
(dt1-dt).days
এই উত্তর দেবে। ইনপুটগুলির মধ্যে একটি হ'ল ডেটা ফ্রেম কলাম। কেবল ব্যবহার dt.days স্থানে দিন
(dt1-dt).dt.days
একটি datetime.toordinal()
পদ্ধতি রয়েছে যা এখনও উল্লেখ করা হয়নি:
import datetime
print(datetime.date(2008,9,26).toordinal() - datetime.date(2008,8,18).toordinal()) # 39
https://docs.python.org/3/library/datetime.html#datetime.date.toordinal
date.
toordinal ()তারিখ, যেখানে 1 বছরের জানুয়ারি 1 কোন পূরণবাচক 1. হয়েছে প্রলেপ্টিক গ্রেগরিয়ান পূরণবাচক ফিরুন
date
বস্তুর ঘ ,date.fromordinal(d.toordinal()) == d
।
দিনের পার্থক্য গণনা করার জন্য উপযুক্ত বলে মনে হচ্ছে, যতটা পঠনযোগ্য নয় timedelta.days
।
(d1 - d0).days
আয় 0
, d1.toordinal() - d0.toordinal()
আয় 1
। আপনার আসল ইউসকেসে আপনার কী প্রয়োজন তা নির্ভর করে।
তারিখ এবং সময় গণনা করার জন্য, বিভিন্ন বিকল্প রয়েছে তবে আমি সহজ উপায়ে লিখব:
from datetime import timedelta, datetime, date
import dateutil.relativedelta
# current time
date_and_time = datetime.datetime.now()
date_only = date.today()
time_only = datetime.datetime.now().time()
# calculate date and time
result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10)
# calculate dates: years (-/+)
result = date_only - dateutil.relativedelta.relativedelta(years=10)
# months
result = date_only - dateutil.relativedelta.relativedelta(months=10)
# days
result = date_only - dateutil.relativedelta.relativedelta(days=10)
# calculate time
result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10)
result.time()
আশা করি এটা সাহায্য করবে
from datetime import date
def d(s):
[month, day, year] = map(int, s.split('/'))
return date(year, month, day)
def days(start, end):
return (d(end) - d(start)).days
print days('8/18/2008', '9/26/2008')
এটি অবশ্যই ধরে নিয়েছে যে আপনি ইতিমধ্যে যাচাই করেছেন যে আপনার তারিখগুলি ফর্ম্যাটে রয়েছে r'\d+/\d+/\d+'
।
map(int, s.split('/'))
। একেবারে গ্রাউন্ডব্রেকিং নয়, তবে আবার এই প্রশ্নটি বেশ বোকা মৌলিক। আমার উত্তরটি কেবল বিড়ালের চামড়ার অন্য উপায় দেখায়।
এই সমস্যাটি নিয়ে যাওয়ার জন্য এখানে তিনটি উপায় রয়েছে:
from datetime import datetime
Now = datetime.now()
StartDate = datetime.strptime(str(Now.year) +'-01-01', '%Y-%m-%d')
NumberOfDays = (Now - StartDate)
print(NumberOfDays.days) # Starts at 0
print(datetime.now().timetuple().tm_yday) # Starts at 1
print(Now.strftime('%j')) # Starts at 1
np.datetime64
থেকেpython datetime
stackoverflow.com/questions/52982056/...