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.
"""
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 the day of the month isn't 1 or 15, increase the day by 1
while fromdate.day not in (1, 15):
fromdate = fromdate + datetime.timedelta(days=1)
return fromdate
我不想仅仅键入答案就完全破坏了您的学习体验,但是Python库使这变得非常容易。看看datetime模块,特别是}类。在
date
和{datetime
模块中的类将有所帮助。在你只需要检查一下是不是在15号以后。如果是,找下个月1号。如果不是,找本月15号。在
有趣的问题,这里有一个完整的解决方案。我将从我的函数定义开始,我把它放在一个名为
payday.py
的文件中:接下来我们需要一些测试。这是为了清楚地定义我们方法的行为。因为您是python的新手,所以我将全力以赴地给您举一个使用unittests的示例。在
^{pr2}$这是一个可运行的python模块。您可以继续将其命名为
test_payday.py
,并用python test_payday.py
运行它。这将立即失败,并显示各种错误消息,因为我们还没有编写正确的代码。在在玩弄了一番之后日期时间.日期工作,我已经计算出:
mydatetime.day
是一个月的一天,mydatetime + datetime.timedelta(days=1)
将在一年中的某一天创建一个新的datetime
。因此,我可以把这个放在payday.py
中。在运行单元测试,它应该是黄金。请注意,在我的测试中,我做了这样一个测试:如果我检查“下一个”发薪日是什么,它会返回自己的发薪日。将其改为返回“下一个”发薪日是留给读者的练习。在
相关问题 更多 >
编程相关推荐