我需要实现一个使用工作日的条件中断。我有一个DateField
的课程,如果该日期将来不到5个工作日,则会发生一些事情(操作a
),否则会发生b
。如何确定两个对象之间的工作日数?
显然,我需要计算从今天开始的5个工作日。使用简单的时间增量可以很容易地找到未来5天,但考虑到工作日,它会变得更加复杂。我想我现在可以安全地忽略假期(这不是最好的情况,但我认为我可以在星期一至星期五的工作日内到期)。任何人都可以给我一些指导,说明我可以做些什么:target = today + 5 business_days
?
由于
答案 0 :(得分:2)
这是一个通用的解决方案,即使你的案例很简单; P
from datetime import timedelta, date
def add_business_days(from_date, number_of_days):
to_date = from_date
while number_of_days:
to_date += timedelta(1)
if to_date.weekday() < 5: # i.e. is not saturday or sunday
number_of_days -= 1
return to_date
结果。
>>> date.today()
datetime.date(2013, 7, 25)
>>> add_business_days(date.today(), 6)
datetime.date(2013, 8, 2)
如果您在if语句中检查日期是否属于假日,则会获得奖励。
答案 1 :(得分:0)
此示例是指您将django项目作为API
使用Numpy的SCIPY可以获得工作日(查看详情)
您必须通过// this is caleld after AuthenticationTokenProvider.Receive
public override Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
{
base.GrantRefreshToken(context);
if (UserLocked(context.Ticket.Identity))
{
context.Rejected();
context.SetError("invalid_grant", "User is locked", "usr-lockout");
}
}
numpy
Python 2.7
pip
pip install numpy
在pip3 install numpy
添加,具体取决于您要将属性方法放在何处:
models.py
然后在你的class WorkingDay(models.Model):
# YY-MM-DD
start = models.DateField(null=True, verbose_name="start")
end = models.DateField(null=True, verbose_name="end")
@property
def workdays(self):
total = np.busday_count(self.start, self.end)
return total
中你可能有类似的东西。
serializers.py
在你的观点中你可能会做这样的事情。
class WorkingDaySerializer(serializers.ModelSerializer):
workdays = serializers.IntegerField(read_only=True)
class Meta:
model = WorkingDay
fields = '__all__'
read_only_fields = ['workdays']