Google路线优化请求执行时的时间窗口异常问题排查
问题原因分析
1. 时区转换逻辑错误
转换DTO时,直接将带时区的datetime对象的本地时间部分格式化后添加Z(UTC时区标识),而非先将原时区时间转换为UTC时间。例如测试用例中的2025-01-19T12:00:00+01:00,被错误格式化为2025-01-19T12:00:00Z(标记为UTC时间),但该时间对应的实际UTC时间应为2025-01-19T11:00:00Z。
2. 时间窗口超出全局范围
错误返回的2025-01-19T04:00:00-08:00是转换后的错误UTC时间(2025-01-19T12:00:00Z)对应UTC-8时区的时间,该时间落在Google Maps Route Optimization设置的全局时间窗口之外,触发了验证错误。
解决方案
1. 修正时区转换代码
修改fromDeliveryToDeliveryDTO方法中的时间窗口转换逻辑,先将原时区时间转换为UTC时间,再格式化并添加Z标识:
def fromDeliveryToDeliveryDTO(delivery: Delivery) -> DeliveryDTO: location = LocationDTO( latitude=delivery.arrivalLocation.latitude, longitude=delivery.arrivalLocation.longitude ) # 先转换为UTC时间再格式化 timeWindows = [ TimeWindowDTO( startTime=timeWindow.startTime.astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S")+"Z", endTime=timeWindow.endTime.astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S")+"Z" ) for timeWindow in delivery.timeWindows ] return DeliveryDTO( arrivalLocation=location, duration=delivery.duration, timeWindows=timeWindows )
2. 校验全局时间窗口配置
确认Google Maps Route Optimization请求中的全局时间窗口(globalStartTime/globalEndTime)范围,确保转换后的UTC时间窗口落在该范围内。例如测试用例原时间转换为UTC后是2025-01-19T11:00:00Z至2025-01-19T13:00:00Z,需保证全局时间窗口覆盖该时段。
内容的提问来源于stack exchange,提问作者Ketterle
相关产品推荐
相关产品推荐

