2012-05-30 30 views
5

XQueryには、日付変換に便利な関数が用意されています。しかし、「今日」や「昨日」のような相対日付を実際の日付に変換する方法はありますか?「今日」と「昨日」のような相対日付をXQueryの日付オブジェクトに変換するにはどうすればよいですか?

たとえば、「今日は17:33」を「2012-05-30」に、「昨日、22:13」から「2012-05-29」に変換する必要があります。

答えて

8

1.日付文字列を解析します。

日付文字列を解析します。私は日付を示す単語を分割して解析する小さな関数を提供しました。日付の便利な名前をいくつか追加しましたが、必要に応じて簡単に追加することができます。小文字に変換することができます。一致する日付の計算にはXQuery date and time functionsを使用します。日付

は今、あなたがそれを必要とするように日付文字列の書式を設定するXQuery 3.0の機能format-date(...)を(私はこの例で使用BaseXはありません、あなたのXQueryエンジンがサポートしている願っています)を使用

declare function local:from-relative-date($string as xs:string) as xs:date { 
    switch (lower-case(substring-before($string, ","))) 
     case "today"    return current-date() 
     case "yesterday"   return current-date() - xs:dayTimeDuration('P1D') 
     case "day before yesterday" return current-date() - 2 * xs:dayTimeDuration('P1D')  
     case "tomorrow"    return current-date() + xs:dayTimeDuration('P1D')  
     case "day after tomorrow" return current-date() + 2 * xs:dayTimeDuration('P1D')  
     default      return error(xs:QName("XPTY0004"), "Unknown Date") 
}; 

2.フォーマット:それは、あなたがmonthdayためyear-from-date(...)と応じた機能を使用する必要がありますしない場合

format-date(local:from-relative-date("Yesterday, 22:13"), "[Y]-[M00]-[D00]") 

、書式設定、いくつかの番号を使用して自分自身を連結します。

+0

+1、Awwこれはこのようなものです。我々は、私が存在を更新するために働く場所を確かめる必要があります! – matchew

関連する問題