我必须使用 xquery 创建 DDMMYYYY 格式的日期字符串。输入到我的 xquery 的日期将类似于“2004-05-02T00:00:00+01:00”。截至目前,我正在使用以下解决方案来获取所需的 fromat(02052004),
$dateString:= concat(substring($dateInput, 9, 2), substring($dateInput, 6, 2), substring($dateInput, 1, 4));
Run Code Online (Sandbox Code Playgroud)
有没有其他方法或内置函数可以将日期转换为所需的字符串格式?
如果您可以访问XQuery 3.0,您可以利用format-dateTime($date, $picture):
let $date := xs:dateTime("2004-05-02T00:00:00+01:00")
return format-dateTime($date, "[D,2][M,2][Y,4]")
Run Code Online (Sandbox Code Playgroud)
如果您还没有(仅XQuery 1.0),您仍然可以使用更具语义的版本。由于它也没有format-number(...)函数,我使用 functx 中的一些准备好的函数:
declare namespace functx = "http://www.functx.com";
declare function functx:pad-integer-to-length
( $integerToPad as xs:anyAtomicType? ,
$length as xs:integer ) as xs:string {
if ($length < string-length(string($integerToPad)))
then error(xs:QName('functx:Integer_Longer_Than_Length'))
else concat
(functx:repeat-string(
'0',$length - string-length(string($integerToPad))),
string($integerToPad))
} ;
declare function functx:repeat-string
( $stringToRepeat as xs:string? ,
$count as xs:integer ) as xs:string {
string-join((for $i in 1 to $count return $stringToRepeat),
'')
} ;
let $date := xs:dateTime("2004-05-02T00:00:00+01:00")
let $date := xs:date($date)
return string-join((
functx:pad-integer-to-length(day-from-date($date), 2),
functx:pad-integer-to-length(month-from-date($date), 2),
functx:pad-integer-to-length(year-from-date($date), 4)
))
Run Code Online (Sandbox Code Playgroud)
如果您喜欢更庞大但语义的版本或简单的字符串操作,请自行决定。请注意,时区可能会导致不同的结果,具体取决于您选择的时区。
| 归档时间: |
|
| 查看次数: |
15661 次 |
| 最近记录: |