You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何对可能存在到达时间早于出发时间的航班列表进行排序?

如何对可能存在到达时间早于出发时间的航班列表进行排序?

嘿,我来帮你捋捋这个问题!你已经把所有航班时间转成UTC了,之前单纯按Departure排序一切正常,直到遇到那种到达时间比出发时间还早的航班——说白了就是跨国际日期变更线的长途航班嘛,UTC时间里看起来到达更早,但实际是飞了十几个小时跨了天。而且测试人员已经让你意识到,之前的逻辑在这种场景下可能有问题,对吧?

先给大家看看你的Flight类定义:

public class Flight {
    public string Name {get;set;}
    public DateTimeOffset Departure { get; set; }
    public DateTimeOffset Arrival { get; set; }
}

其实核心要先搞清楚:你排序的目标是什么?是给乘客展示他们的行程顺序,还是按航班的到达时间来排?

情况1:按乘客的行程出发先后排序(最常用的场景)

这种情况其实完全可以继续用Departure升序排序!别被Arrival < Departure的情况迷惑,这只是UTC时间的计算结果——本质上乘客还是先坐出发时间早的航班,哪怕那班航班跨了日界线。比如一班从东京飞洛杉矶的航班,UTC出发是10号22:00,UTC到达是10号18:00,但乘客确实是先坐这班,再坐11号01:00出发的航班,按Departure排的顺序是完全符合乘客认知的。

代码实现就是你之前的逻辑,完全没问题:

var sortedFlights = flights.OrderBy(f => f.Departure).ToList();

情况2:按航班的实际到达时间先后排序

如果你的需求是按乘客实际到达的时间先后(比如统计所有航班的到达顺序),这时候就要处理Arrival < Departure的情况了——因为这种航班的实际到达时间(当地时间)其实是UTC Arrival加一天,所以排序时要把这类航班的Arrival加上24小时再参与比较:

var sortedFlights = flights.OrderBy(f => 
    f.Arrival < f.Departure ? f.Arrival.AddDays(1) : f.Arrival
).ToList();

这样处理后,跨日界线的航班就会被放到正确的位置,符合实际的到达先后逻辑。

备注:内容来源于stack exchange,提问作者mmcfly

火山引擎 最新活动