我正面临时区问题。 代码:
{
let $ hour:= hours-from-duration(fn:subtract-dateTimes-yielding-dayTimeDuration(xs:dateTime(data($ FlightSegment / @ ArrivalDateTime)),xs:dateTime(data($ FlightSegment / @ DepartureDateTime)) ))) let $ min:= minutes-from-duration(fn:subtract-dateTimes-yielding-dayTimeDuration(xs:dateTime(data($ FlightSegment / @ ArrivalDateTime)),xs:dateTime(data($ FlightSegment / @ DepartureDateTime))))
返回
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)
我得到的回应:
DepartureDateTime:2015-08-15T09:50:00
ArrivalDateTime:2015-08-15T06:30:00
FlightDuration:0-3:0-20
飞行时间(0-3:0-20)我得到负值,所以请你帮我解决这个问题,我怎样才能获得正值。
你可以告诉我如何在不同时区获得适当的飞行时间。 在此先感谢。答案 0 :(得分:1)
看起来你有两个问题。
第一个问题是格式化持续时间,您可以使用functx:pad-integer-to-length()或使用bea date functions(或数字格式功能)进行格式化。这很容易。
您的第二个更难的问题是您的输入数据是机场本地的,无法按照您的方式进行比较。您需要从本地日期时间+端口IATA代码计算实际 UTC 日期时间,可能是通过临时查找,所以
它不一定是UTC;只要您在同一时区比较dateTimes。但是,UTC是一个方便的时区供选择,因此最好使用它。
噢,是的。确保您的OSB JVM具有最新的tzdata,否则您会发现许多目的地的日期计算不准确 - 斐济喜欢在短时间内更改夏令时。