• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Zeit- und Kalenderfunktionen

Der Sprachstandard von XQuery sieht eine kaum überblickbare Menge an Funktionen zur Analyse und Manipulation von Zeit- und Kalenderangaben vor. Da sich die Semantik der Funktionen in vielen Fällen bereits aus der Signatur ergibt, werden in diesem Abschnitt nur die Besonderheiten und Ausnahmen explizit erläutert.

Aktuelle Zeit und Zeitzonen

Die aktuelle Zeit kann durch drei Funktionen in unterschiedlicher Granularität vom System abgefragt werden. Der resultierende Zeitstempel (bei fn:current-dateTime()), das aktuelle Datum (fn:current-date()) bzw. die aktuelle Uhrzeit (fn:current-time()) repräsentieren einen Zeitpunkt während der Auswertung einer XQuery-Anfrage. Das Verhalten der Funktionen ist stabil, was bedeutet, dass ein mehrmaliges Aufrufen der Funktion innerhalb einer Anfrage den gleichen Wert liefert.

SignaturBeschreibung
fn:current-dateTime()
as xs:dateTime
fn:current-date()
as xs:date
fn:current-time()
as xs:time
liefert den aktuellen Zeitstempel bzw. das
aktuelle Datum oder die aktuelle Uhrzeit

Tab. Funktionen zur Ermittlung des aktuellen Zeitstempels

Jedem Auswertungskontext ist eine implizite Zeitzone zugeordnet, die bei allen Funktionen und Operationen auf Zeitangaben betrachtet wird. Die Funktion fn:implicit-timezone() kann herangezogen werden, um die aktuell gültige Zeitzone zu ermitteln. Die Familie der fn:adjust-xxx()-Funktionen ermöglicht die Anpassung einer Zeitangabe vom Typ xs:dateTime, xs:date und xs:time an die implizit im Auswertungskontext gültige (Wegfall des entsprechenden Parameters) oder eine explizit übergebene Zeitzone:

SignaturBeschreibung
fn:implicit-timezone()
as xdt:dayTimeDuration?
liefert die aktuelle Zeitzone des gerade
gültigen Auswertekontextes
fn:adjust-{dateTime|
date|
time}-to-timezone(

$arg as {xs:dateTime?
xs:date|
xs:time},
$timezone as xdt:dayTimeDuration?)
as {xs:dateTime?|
xs:date?|
xs:time?}
passt die als Parameter übergebene
Zeitangabe an die jeweilige Zeitzone an;
die Funktion existiert für die Typen:
· dateTime
· date
· time
fn:get-timezone-from-{dateTime|
date|
time}(

$arg as {xs:dateTime?|
xs:date?|
xs:time?})
as xdt:dayTimeDuration?
liefert die Zeitzone als Wert eines
Uhrzeitintervalls von dem jeweiligen
Parameter zurück;
die Zeitverschiebung kann für die
folgenden Typen ermittelt werden:
· dateTime
· date
· time

Tab. Funktionen für Zeitzonen

Als Beispiel für die obigen Funktionen möge der folgende FLWOR-Ausdruck dienen:

let $tz1 := fn:implicit-timezone()
let $tz2 := xdt:dayTimeDuration("-PT10H")
return
<ImpliziteZeitzone>{ $tz1 }</ImpliziteZeitzone>,
<T1>
{fn:adjust-dateTime-to-timezone(
xs:dateTime("2004-03-05T13:00:00")),
fn:adjust-date-to-timezone(xs:date("2004-03-05")),
fn:adjust-time-to-timezone(xs:time("13:00:00")) }
</T1>,
<T2>
{fn:adjust-dateTime-to-timezone(xs:dateTime("2004-03-05T13:00:00-08:00")),
fn:adjust-date-to-timezone(xs:date("2004-03-05-08:00")),
fn:adjust-time-to-timezone(xs:time("13:00:00-08:00")) }
</T2>, 
<T3>
{fn:adjust-dateTime-to-timezone(xs:dateTime("2004-03-05T13:00:00-08:00"), $tz2),
fn:adjust-date-to-timezone(xs:date("2004-03-05-08:00"), $tz2),
fn:adjust-time-to-timezone(xs:time("13:00:00-08:00"), $tz2), }
</T3>  

Dieser Ausdruck liefert folgendes Ergebnis, wobei im ersten Fall eine Übernahme der impliziten Zeitzone erfolgt. Im zweiten Szenario werden Zeitangaben mit einer Zeitzone in die implizite Zeitzone umgerechnet. Im dritten Block erfolgt eine Anpassung schließlich hinsichtlich einer absoluten Zeitzone (vom Typ xdt:dayTimeDuration()), was bei der Datumsanpassung in diesem Beispiel zu einem Wechsel des Tages führt.

<ImpliziteZeitzone>-PT8H0M</ImpliziteZeitzone>
<T1>2004-03-05T10:00:00-08:00
2004-03-05-08:00
10:00:00-08:00
</T1>
<T2>2004-03-05T10:00:00-05:00
2004-03-05-05:00
10:00:00-05:00
</T2>
<T3>2004-03-05T15:00:00-10:00
2004-03-04-10:00
15ß:00:00-10:00
</T3>

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>