fn:adjust-dateTime-to-timezone

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

   

Kategorie: Datumsfunktionen – Zeitzone

Herkunft: XPath 2.0

Rückgabewert: Ein Zeitstempelwert xs:dateTime

Aufruf/Argumente:

fn:adjust-dateTime-to-timezone($dateTime?, $zeitzone?)

$dateTime:
Optional. Ein Zeitstempelwert xs:dateTime. Wird kein Wert übergeben, so gibt die Funktion eine leere Sequenz zurück.

$zeitzone:
Optional. Das zweite Argument ist eine Zeitzonenangabe vom Typ xs:dayTimeDuration. Entfällt das Argument, so wird die im Auswer­tungskontext implizit vorhandene Zeitzonenangabe verwendet. Wird als zwei­tes Argument die leere Sequenz übergeben, so wird eine vorhandene Zeitzo­nenangabe aus dem als erstem Argument übergebenen Zeitstempelwert entfernt.

Die Zeitzonenangabe darf einen Wert von -PT14H nicht unter- und einen Wert von PT14H nicht überschreiten. Andernfalls wird der Fehler Invalid timezone value (err:FODT0003) gemeldet.

Verwendungszweck:

Die Funktion passt einen Zeitstempelwert xs:dateTime an eine Zeitzonenangabe an, die entweder als zweites Argument übergeben wird oder sich implizit aus dem Kontext ergibt. Bei dem Tageszeit­anteil des Ergebnisses wird die ursprüngliche Zeitzone berücksichtigt und gegebenenfalls das Datum angepasst (siehe Beispiel 6).

Beispiele:

Beispiel 1 – ohne Übergabe einer Zeitzonenkorrekturangabe:

fn:adjust-dateTime-to-timezone(
          xs:dateTime("2007-07-07T10:00:00")
  )

ergibt 2007-07-07T10:00:00-05:00

Hier wurde eine implizite Zeitzonenangabe von -5:00 angenommen, entspre­chend -PT5H0M. Da kein zweites Argument übergeben wurde, wird die impli­zite Zeitzonenangabe mit dem Zeitstempelwert verknüpft und ausgegeben.

Beispiel 2 – ohne Übergabe einer Zeitzonenkorrekturangabe:

fn:adjust-dateTime-to-timezone(
          xs:dateTime("2007-07-07T10:00:00-07:00")
  )

ergibt 2007-03-07T12:00:00-05:00

Hier wurde eine implizite Zeitzonenangabe von -5:00 angenommen, entspre­chend -PT5H0M. Wird ein Zeitstempelwert mit Zeitzonenangabe, aber ohne Zeitzonenkorrekturangabe übergeben, so wird die Zeitzonenangabe verworfen und durch die implizite Zeitzonenangabe ersetzt. Der Tageszeitanteil wird angepasst, indem der ursprüngliche Zeitzonenfaktor subtrahiert und der neue addiert wird. In diesem Fall ergibt sich die Zeit also durch 10:00:00 – (-07:00) + (- 05:00) zu 12:00:00.

Beispiel 3 – mit Übergabe einer Zeitzonenkorrekturangabe:

fn:adjust-dateTime-to-timezone(
          xs:dateTime("2007-07-07T10:00:00"),
          xs:dayTimeDuration("-PT10H")
  )

ergibt 2007-07-07T10:00:00-10:00

Wird ein Korrekturfaktor in Form einer Zeitzonenangabe als zweites Argument übergeben, so wird dieser in das Ergebnis eingerechnet. Ein möglicherweise vorhandener impliziter Zeitzonenwert des Auswertungskontextes wird nicht berücksichtigt. Eine Anpassung des Tageszeitanteils ist nicht erforderlich.

Beispiel 4 – mit Übergabe einer Zeitzonenkorrekturangabe:

fn:adjust-dateTime-to-timezone(
          xs:dateTime("2007-03-07T10:00:00-07:00"),
          xs:dayTimeDuration("-PT10H")
  )

ergibt 2007-03-07T07:00:00-10:00

Besitzt der Zeitstempelwert bereits eine Zeitzonenangabe in Form eines Fak­tors, so wird dieser durch den übergebenen Zeitzonenfaktor ersetzt. Ein mög­licherweise vorhandener impliziter Zeitzonenwert des Auswertungskontextes wird nicht berücksichtigt. Die Anpassung des Tageszeitanteils erfolgt analog zu Beispiel 2.

Beispiel 5 – mit Übergabe einer leeren Sequenz:

fn:adjust-dateTime-to-timezone(
          xs:dateTime("2007-03-07T10:00:00-07:00"), 
          ()
   
)

ergibt 2007-03-07T10:00:00

Besitzt der Zeitstempelwert eine Zeitzonenangabe und wird der Funktion als zweites Argument eine leere Sequenz übergeben, so wird die Zeitzonenangabe aus dem Zeitstempelwert entfernt. Ein möglicherweise vorhandener impliziter Zeitzonenwert des Auswertungskontextes wird nicht berücksichtigt. Der Tages­zeitanteil bleibt unverändert erhalten.

Beispiel 6 – mit Datumskorrektur:

fn:adjust-dateTime-to-timezone(
          xs:dateTime("2007-07-07T10:00:00-07:00"),
          xs:dayTimeDuration("PT10H")
  )

ergibt 2007-07-08T03:00:00+10:00

Ergibt die Korrektur der Tageszeitangabe bei Einrechnung beider Zeitzonenkor­rekturangaben einen Wert größer 24 für die Stundenangabe, so wird die Datumsangabe entsprechend angepasst. Hier ergibt sich für die Stundenzahl 10:00:00 – (-07:00) + 10:00 gleich 27 Stunden, was in 03:00:00 des Folgetags umgerechnet wird. Der Tagesanteil des Datums erhöht sich daher um 1.

Funktionsdefinition:

XPath 1.0:

Funktion nicht verfügbar

XPath 2.0:

fn:adjust-dateTime-to-timezone($arg as xs:dateTime?)
                  as xs:dateTime?
fn:adjust-dateTime-to-timezone($arg as xs:dateTime?,
                  $timezone as xs:dayTimeDuration?) 
                  as xs:dateTime?
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn