我是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"
提前致谢。
答案 0 :(得分:5)
如果你想摆脱日期的时区组件,你可以使用fn:adjust-date-to-timezone()
,使用空序列作为第二个参数:
fn:adjust-date-to-timezone($day, ())
答案 1 :(得分:5)
将dateTime对象转换为字符串时,会选择默认的ISO日期格式,始终包含时区。使用带有date picture string $picture
的fn: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]")