An interesting question, and here is a complete solution. I will start by defining my function, I put it in a file with the name payday.py:
def nexypayday(fromdate=None):
"""
@param fromdate: An instance of datetime.date that is the day to go from. If
not specified, todays date is used.
@return: The first payday on or after the date specified.
"""
Next, we need some tests. This should clearly define the behavior of our method. Since you are new to python, I am going out of my way and give you an example of using unittests.
from unittest import TestCase, main
import payday
import datetime
class TestPayday(TestCase):
def test_first_jan(self):
self.assertEqual(payday.nextpayday(datetime.date(2010, 1, 1)),
datetime.date(2010, 1, 1))
def test_second_jan(self):
self.assertEqual(payday.nextpayday(datetime.date(2010, 1, 2)),
datetime.date(2010, 1, 15))
def test_fifteenth_jan(self):
self.assertEqual(payday.nextpayday(datetime.date(2010, 1, 15)),
datetime.date(2010, 1, 15))
def test_thirty_one_jan(self):
self.assertEqual(payday.nextpayday(datetime.date(2010, 1, 31)),
datetime.date(2010, 2, 1))
def test_today(self):
self.assertTrue(payday.nextpayday() >= datetime.date.today())
if __name__ == '__main__':
main()
python. test_payday.py python test_payday.py. , .
datetime.date : mydatetime.day - , mydatetime + datetime.timedelta(days=1) datetime . , payday.py.
import datetime
def nextpayday(fromdate=None):
"""
@param fromdate: An instance of datetime.date that is the day to go from. If
not specified, todays date is used.
@return: The first payday on or after the date specified.
"""
if fromdate is None:
fromdate = datetime.date.today()
while fromdate.day not in (1, 15):
fromdate = fromdate + datetime.timedelta(days=1)
return fromdate
, . , , , "" , . "" .