我正在创建一个简单的计时,但是我的逻辑很难处理,if the user log between 10:00 AM to 10:15 AM or 12:00 PM or 3:00 PM to 3:15 PM
状态将是BREAK OUT
,它可以工作,当用户日志05:00PM to 11:00PM
时,状态将是TIME OUT
,但是当用户在5:00AM to 4:00PM
之间登录时,状态仍然是TIME OUT
,假设是TIME IN
这是我的密码:
def set_time(fk):
status = 'TIME IN'
print('RESULT: ' + datetime.strptime(self.request.POST['time'], '%I:%M:%S %p').strftime('%I:%M %p'))
print('set')
user_time = datetime.strptime(self.request.POST['time'], '%I:%M:%S %p').strftime('%I:%M %p')
if (user_time >= datetime.strptime('10:00 AM', '%I:%M %p').strftime('%I:%M %p') \
and user_time <= datetime.strptime('10:15 AM', '%I:%M %p').strftime('%I:%M %p')) \
or user_time >= datetime.strptime('12:00 PM', '%I:%M %p').strftime('%I:%M %p') \
or (user_time >= datetime.strptime('03:00 PM', '%I:%M %p').strftime('%I:%M %p') \
and user_time <= datetime.strptime('03:15 PM', '%I:%M %p').strftime('%I:%M %p')):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'BREAK OUT')
status = 'BREAK OUT'
elif user_time >= datetime.strptime('05:00 AM', '%I:%M %p').strftime('%I:%M %p') \
and user_time <= datetime.strptime('04:00 PM', '%I:%M %p').strftime('%I:%M %p'):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'TIME IN')
status = 'TIME IN'
elif user_time >= datetime.strptime('05:00 PM', '%I:%M %p').strftime('%I:%M %p') \
and user_time <= datetime.strptime('11:00 PM', '%I:%M %p').strftime('%I:%M %p'):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'TIME OUT')
status = 'TIME OUT'
return status
我更新了以下内容:
def set_time(fk):
status = 'TIME IN'
datemask = '%I:%M %p'
print('RESULT: ' + datetime.strptime(self.request.POST['time'], '%I:%M:%S %p').strftime(datemask))
print('set')
user_time = datetime.now().strftime(datemask)
print('USER TIME: ' + str(user_time))
if (user_time >= datetime.strptime('10:00 AM', datemask).strftime(datemask) \
and user_time <= datetime.strptime('10:15 AM', datemask).strftime(datemask)):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'BREAK OUT')
status = 'BREAK OUT'
elif user_time >= datetime.strptime('12:00 PM', datemask).strftime(datemask) and \
user_time <= datetime.strptime('12:59 PM', datemask).strftime(datemask):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'BREAK OUT')
status = 'BREAK OUT'
elif user_time >= datetime.strptime('03:00 PM', datemask).strftime(datemask) \
and user_time <= datetime.strptime('03:15 PM', datemask).strftime(datemask):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'BREAK OUT')
status = 'BREAK OUT'
elif user_time >= datetime.strptime('05:00 AM', datemask).strftime(datemask) \
and user_time <= datetime.strptime('04:00 PM', datemask).strftime(datemask):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'TIME IN')
status = 'TIME IN'
elif user_time >= datetime.strptime('05:00 PM', datemask).strftime(datemask) \
and user_time <= datetime.strptime('11:00 PM', datemask).strftime(datemask):
TimeLogsModel.objects.create(date = fk,
time = self.request.POST['time'],
status = 'TIME OUT')
status = 'TIME OUT'
return status
通过编写具有明确定义用途的函数,您可以为自己(以及阅读您的代码的任何人,包括您未来的自己)提供帮助
例如:
如果我正确理解了您的逻辑,这会给出正确的状态,例如:
(为清晰起见,请换行)
这将返回
'break out'
。然后,您可以从另一个方法中使用此方法,该方法对通过某个web表单返回的值执行某些操作—将处理表单的代码与测试某些业务规则的代码分离(即,随着时间的推移,状态如何)由于您似乎并不需要工作日的开始和结束时间是可变的,也不需要休息时间,因此您可能希望将其移动到构造函数:
结果:
在您的情况下,可能类似于:
你在做那些不该做的字符串操作,这让我很恼火。您应该直接使用时间对象。我知道@Grismar已经为你提供了一种直接与《泰晤士报》合作的方式。尽管如此,我还是花了一些时间自己整理一些东西,作为另一个例子。我想这有点简单,而且还需要测试。无论如何
相关问题 更多 >
编程相关推荐