不同时区的飞行时间

Flight duration from diffrent time zones

我遇到了时区问题。 代码:

{

让 $hour := hours-from-duration(fn:subtract-dateTimes-yielding-dayTimeDuration(xs:dateTime(data($FlightSegment/@ArrivalDateTime)),xs:dateTime(data($FlightSegment/@出发日期时间)))) 让 $min := minutes-from-duration(fn:subtract-dateTimes-yielding-dayTimeDuration(xs:dateTime(data($FlightSegment/@ArrivalDateTime)),xs:dateTime(data($FlightSegment/@DepartureDateTime))))

return

    if($hour < 10  and $min < 10) then
        <flt-seg:FlightDuration> {concat('0',$hour,':','0',$min)}</flt-seg:FlightDuration>
        else if ($min < 10 ) then 
         <flt-seg:FlightDuration> {concat($hour,':','0',$min)}</flt-seg:FlightDuration>
         else if ($hour < 10 ) then
          <flt-seg:FlightDuration> {concat('0',$hour,':',$min)}</flt-seg:FlightDuration>
         else
          <flt-seg:FlightDuration> {concat($hour,':',$min)}</flt-seg:FlightDuration>


    }

出发机场代码是:BNE(布里斯班)

到达机场代码是:LAX(Lass angels)

我得到的响应:

出发日期时间:2015-08-15T09:50:00

到达日期时间:2015-08-15T06:30:00

飞行时间:0-3:0-20

飞行时间 (0-3:0-20) 我得到的是负值,所以请你帮我解决这个问题,我怎样才能得到正值。

你能告诉我如何在不同时区获得适当的飞行时间吗? 提前致谢。

看起来你有两个个问题。

第一个问题是格式化持续时间,如果您这样做的话,您可以使用 functx:pad-integer-to-length() or using the bea date functions(或数字格式化函数)来完成。这很简单。

你的第二个更难的问题是你的输入数据是机场本地的,无法与你的方式进行比较。您需要根据本地日期时间 + 端口 IATA 代码计算实际的 UTC 日期时间,可能是通过临时查找,所以

  1. 机场 -> timezone ID(可缓存)
  2. 端口本地日期时间 + tzID -> UTC 日期时间。

不一定是UTC;只要您比较同一时区的日期时间。但是,UTC 是一个方便选择的时区,因此最好使用它。

哦对了。确保您的 OSB JVM 具有最新的 tzdata,否则您会发现您的日期计算对于许多目的地来说都是不准确的 - 斐济喜欢在短时间内更改夏令时。