2015-06-08 63 views
1

我是xquery的新手,其中一個要求是通過查詢xDB生成日報。需要從當前日期()刪除時區()xquery

如果我硬編碼日期,我可以從xDB生成報告,但如果我嘗試讀取當前日期從系統我沒有得到任何報告中的值。

代碼段:

let $day := fn:current-date() 
let $hours := ('00', '01', '02', '03', '04', 
     '05', '06', '07', '08', '09', 
     '10', '11', '12', '13', '14', 
     '15', '16', '17', '18', '19', 
     '20', '21', '22', '23') 

let $ddhh := for $i in $hours return concat($day,"T",$i) 
let $title := concat("Average Time By Documents in Hour on ", $day) 

在報告: ( 「關於2015-06-08Z平均時間通過在一小時的文檔」。)

硬編碼值和電流 - 之間的區別date()函數是時區「Z」。我如何擺脫時區「Z」。我只想在變量$ day中說「2015-06-08」,而不是「2015-06-08Z」

在此先感謝。

回答

2

如果你想擺脫日期的時區組件,你可以使用fn:adjust-date-to-timezone(),使用空序列作爲第二個參數:

fn:adjust-date-to-timezone($day,()) 
+0

這不會從輸出中刪除時區。 –

+0

對不起,我誤讀了規範,它只會通過顯式傳遞空序列來工作。單參數arity調整爲默認時區,這是不同的。我編輯了我的答案。好,趕快,謝謝! –

5

當把一個DateTime對象爲字符串,默認選擇ISO日期格式,始終包括時區。使用fn:format-dateTime($dateTime, $picture)date picture string $picture手動轉換日期。

format-date(current-date(), "[Y0001]-[M01]-[D01]") 

您還可以添加小時,所需的格式:

format-dateTime(current-dateTime(), "[Y0001]-[M01]-[D01]-[H01]") 

這甚至讓你忽略你預生成(當然也是一行工作一小時的順序,分割等等它可以更容易地解釋):

let $today := current-date()      (: today :) 
let $today := xs:dateTime($today)     (: convert to dateTime :) 
let $hour := $today + xs:dayTimeDuration("PT3H") (: add 3 hours :) 
return format-dateTime($hour, "[Y0001]-[M01]-[D01]-[H01]")