不同时区的飞行时间
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 日期时间,可能是通过临时查找,所以
- 机场 -> timezone ID(可缓存)
- 端口本地日期时间 + tzID -> UTC 日期时间。
不一定是UTC;只要您比较同一时区的日期时间。但是,UTC 是一个方便选择的时区,因此最好使用它。
哦对了。确保您的 OSB JVM 具有最新的 tzdata,否则您会发现您的日期计算对于许多目的地来说都是不准确的 - 斐济喜欢在短时间内更改夏令时。
我遇到了时区问题。 代码:
{
让 $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 日期时间,可能是通过临时查找,所以
- 机场 -> timezone ID(可缓存)
- 端口本地日期时间 + tzID -> UTC 日期时间。
不一定是UTC;只要您比较同一时区的日期时间。但是,UTC 是一个方便选择的时区,因此最好使用它。
哦对了。确保您的 OSB JVM 具有最新的 tzdata,否则您会发现您的日期计算对于许多目的地来说都是不准确的 - 斐济喜欢在短时间内更改夏令时。