需要从current-date()xquery

时间:2015-06-08 14:02:47

标签: xquery

我是xquery的新手,其中一个要求是通过查询xDB来生成每日报告。

如果我对日期进行硬编码,我可以从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 " ..)的小时平均文件时间

硬编码值和current-date()函数之间的区别是时区" Z"。我如何摆脱时区" Z"。我只想说" 2015-06-08"在变量$ day而不是" 2015-06-08Z"

提前致谢。

2 个答案:

答案 0 :(得分:5)

如果你想摆脱日期的时区组件,你可以使用fn:adjust-date-to-timezone(),使用空序列作为第二个参数:

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

答案 1 :(得分:5)

将dateTime对象转换为字符串时,会选择默认的ISO日期格式,始终包含时区。使用带有date picture string $picturefn:format-dateTime($dateTime, $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]")