在python中计算到每月1号或15号的时间

2024-09-27 21:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python编写一个小的预算程序。这是我编写的第一个学习python的程序。第一步是根据今天的日期计算到第1天或第15天(发薪日)的天数。有人能帮我一点忙吗?在


Tags: 程序天数发薪日
3条回答

我不想仅仅键入答案就完全破坏了您的学习体验,但是Python库使这变得非常容易。看看datetime模块,特别是date和{}类。在

datetime模块中的类将有所帮助。在

你只需要检查一下是不是在15号以后。如果是,找下个月1号。如果不是,找本月15号。在

有趣的问题,这里有一个完整的解决方案。我将从我的函数定义开始,我把它放在一个名为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.
    """

接下来我们需要一些测试。这是为了清楚地定义我们方法的行为。因为您是python的新手,所以我将全力以赴地给您举一个使用unittests的示例。在

^{pr2}$

这是一个可运行的python模块。您可以继续将其命名为test_payday.py,并用python test_payday.py运行它。这将立即失败,并显示各种错误消息,因为我们还没有编写正确的代码。在

在玩弄了一番之后日期时间.日期工作,我已经计算出: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 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

运行单元测试,它应该是黄金。请注意,在我的测试中,我做了这样一个测试:如果我检查“下一个”发薪日是什么,它会返回自己的发薪日。将其改为返回“下一个”发薪日是留给读者的练习。在

相关问题 更多 >

    热门问题