python - 想要动态创建选择字段,即之后的当前时间 + 30 分钟
问题描述
我的代码如下:
def datetime_result():
t = datetime.datetime.now()
intervalTime = 30
currenttime = t.minute
checktm = int(currenttime) - int(intervalTime)
if checktm < 0:
addtime = abs(checktm)
elif checktm > 0:
addtime = intervalTime - checktm
else:
addtime = checktm
opentime = t + datetime.timedelta(minutes=int(addtime))
closetime = datetime.time(22, 30, 0)
firsttime = opentime + datetime.timedelta(minutes=60)
start_time = opentime.strftime('%H:%M')
end_time = closetime.strftime('%H:%M')
slot_time = 30
# Start date from today to next 5 day
start_date = datetime.datetime.now().date()
end_date = datetime.datetime.now().date() + datetime.timedelta(days=0)
days = []
Delivery_Time_CHOICES = ""
date = start_date
while date <= end_date:
time = datetime.datetime.strptime(start_time, '%H:%M')
end = datetime.datetime.strptime(end_time, '%H:%M')
while time <= end:
Delivery_Time_CHOICES += ('(' + "'" + time.strftime("%I.%M%p")
+ "'" + ', ' + "'" + time.strftime("%I.%M%p") + "'" + '),')
time += datetime.timedelta(minutes=slot_time)
date += datetime.timedelta(days=1)
return '(' + Delivery_Time_CHOICES + ')'
此代码将从当前时间 + 病房时间 30 分钟生成时间。当我在选择字段中调用此方法时,出现错误“字符串索引超出范围”,当我将此方法的打印值直接放在选择字段变量中时,它就可以工作了。
解决方案
查看 dateutils.relativedelta 模块。
您可以轻松地操作日期时间对象,设置特定的小时、分钟、秒值等。或者,您可以使用它通过所需的小时/分钟/秒等更改日期时间。
from datetime import datetime
from dateutil.relativedelta import relativedelta
my_original_datetime = datetime.now()
minutes_offset = 30
opening_time = datetime.now() + relativedelta(minute=0, seconds=0, microsecond=0)
closing_time = datetime.now() + relativedelta(hour=17, minute=0, seconds=0, microsecond=0)
delivery_slot_start = opening_time
delivery_slot_end = delivery_slot_start + relativedelta(minutes=minutes_offset)
available_delivery_times = [(delivery_slot_start.strftime('%H:%M'), delivery_slot_end.strftime('%H:%M'))]
while delivery_slot_end <= closing_time:
delivery_slot_start = delivery_slot_end
delivery_slot_end += relativedelta(minutes=minutes_offset)
available_delivery_times.append(
(delivery_slot_start.strftime('%H:%M'),
delivery_slot_end.strftime('%H:%M'))
)
print(tuple(available_delivery_times))
推荐阅读
- .net - .NET Core 2.2 - 种子管理员用户
- marklogic - 进行自动化 CloudFormation 部署时是否可以指定 MarkLogic Developer 许可证?
- python - 使用 cx_Oracle 包从 python 环境执行的 oracle SQL 查询中获取动态日期
- javascript - GridView 中的 JavaScript/krajeeDialog.alert 似乎有问题
- reactjs - 提升状态替代从其他组件调用方法
- c# - 将 SSL 证书附加到 IIS 服务器上主网站的子绑定
- react-native - 使用 Firestore 时在 React Native 中自动刷新子集合
- javascript - 调用ng-click时如何从selenium python下载文件
- javascript - 使用 Formik 自动调整大小?
- python - Hash 实现上的 TypeError