2015-08-13 50 views
0

我正面臨着時區問題。 代碼:不同時區的飛行時間

{

設$小時:=小時從持續時間(FN:減去-日期時間高產-dayTimeDuration(XS:日期時間(數據($ FlightSegment/@ ArrivalDateTime)),XS:日期時間(數據($ FlightSegment/@DepartureDateTime)))) let $ min:=持續時間分鐘數(fn:subtract-dateTimes-yielding-dayTimeDuration(xs:dateTime(data($ FlightSegment/@ ArrivalDateTime)),xs: DATETIME(數據($ 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(拉斯天使)

響應我得到:

DepartureDateTime:2015-08-15T09:50:00

ArrivalDateTime:2015-08-15T06:30:00

FlightDuration:0-3:0-20

飛行時間(0-3:0-20)1我越來越負面的價值,所以請求你幫我解決這個問題,我該如何獲得正面的價值。

你能否讓我知道我將如何獲得適當的飛行時間與不同的時區。 在此先感謝。

+0

請大家看看[降價格式幫助頁面(http://stackoverflow.com/editing-help#comment-formatting) - 您可以通過四個空格縮進後的代碼塊。這會讓人們更容易理解你的代碼在做什麼。 – ReactiveRaven

+1

查看UTC日期... –

回答

1

看起來像你有兩個的問題。

第一個問題是格式化持續時間,如果你這樣做,你可以使用functx:pad-integer-to-length()或使用bea date functions(或數字格式函數)。這很簡單。

您的第二個難題是您的輸入數據是機場本地的,無法與您進行比較的方式進行比較。你需要從本地日期時間+端口IATA代碼計算實際UTC日期時間,可能是通過一個臨時的查找,所以

  1. 機場 - >timezone ID(緩存)
  2. 端口本地日期時間+ TZID - > UTC dateTime。

它不一定是UTC;只要你在同一時區比較日期時間。但是,UTC是一個方便選擇的時區,所以最好使用它。

噢。確保你的OSB JVM有最新的tzdata,否則你會發現你的日期計算在許多目的地都是不準確的 - 斐濟喜歡在短時間內改變夏令時。