2014-06-23 56 views
2

我必須使用xquery以DDMMYYYY格式創建日期字符串。輸入到我的xquery的日期將類似於「2004-05-02T00:00:00 + 01:00」。截至目前,我用以下解決方案來獲得所需的fromat(02052004),使用XQuery將日期輸入轉換爲特定格式的字符串值

$dateString:= concat(substring($dateInput, 9, 2), substring($dateInput, 6, 2), substring($dateInput, 1, 4)); 

是否有任何其他方式或使用內置的功能,我可以一個日期轉換爲所需的字符串格式?

回答

2

如果你要的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]") 

如果你還沒有(僅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) 
)) 

決定你自己,如果你喜歡比較笨重,但語義版本或簡單的字符串處理。請注意,根據您選擇的時區,時區可能會導致不同的結果。

0

你可以嘗試以下方法:

FN:格式日期時間(XS:DATETIME($ dateInput) 「[M01] [D01] [Y0001]」)

生產02052004

1

如果您使用的是XQuery 1.0處理器,它會變得非常複雜。有像fn:day-from-dateTime()這樣的函數可用,但是會爲10以下的數字返回單個數字,這很可能不是您想要的。

您可以編寫一個簡單的填充功能

declare function local:pad($number as xs:integer) as xs:string 
{ 
    if ($number<10) 
    then concat("0", $number) 
    else xs:string($number) 
}; 

,如果你的處理器支持的XQuery 3.0,該fn:format-dateTime()可用,並允許進行簡單格式化用它來構造日期

concat(
    local:pad(day-from-dateTime(xs:dateTime($dateInput))), 
    local:pad(month-from-dateTime(xs:dateTime($dateInput))), 
    year-from-dateTime(xs:dateTime($dateInput)) 
) 

。格式規則可在http://www.w3.org/TR/2014/REC-xpath-functions-30-20140408/#rules-for-datetime-formatting獲得。對於所需輸出下面應該工作:

fn:format-dateTime(xs:dateTime($dateInput),"[D01][M01][Y}") 
相關問題