जवाबों:
यदि आपके पास दो दिनांक ऑब्जेक्ट हैं, तो आप उन्हें घटा सकते हैं, जो किसी 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. है की proleptic ग्रेगोरियन क्रमसूचक लौटें
date
वस्तु घ ,date.fromordinal(d.toordinal()) == d
।
लगता है अच्छी तरह से दिनों के अंतर की गणना के लिए अनुकूल है, हालांकि के रूप में पठनीय नहीं है timedelta.days
।
(d1 - d0).days
लौटता है 0
, d1.toordinal() - d0.toordinal()
लौटता है 1
। इस पर निर्भर करता है कि आपको अपने वास्तविक usecase में क्या चाहिए।
दिनांक और समय की गणना के लिए, कई विकल्प हैं लेकिन मैं सरल तरीका लिखूंगा:
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/...