Zeitzonen Timestamp in UTC umwandeln

  • Beitrag
    julianma
    Teilnehmer
    Input in eine Transformation: Zeitstempel ohne Zeitzoneninformation, wobei sich der Zeitpunkt immer auf die deutsche Zeitzone bezieht

    <Zeitpunkt>2020-10-02T22:00:00</Zeitpunkt>

    Output soll ein “Unix-Timestamp” sein, der dem UTC Timestamp des übergebenen Timestamps entspricht.

    In diesem Fall wäre das “1601668800”, da 2020-10-02T22:00:00 -> 2020-10-02T20:00:00 UTC entspricht.

     

    An sich ist das Umwandeln kein Problem, dies erfolgt über folgende XSLT-Funktionskette:

    “floor((fn:adjust-dateTime-to-timezone(xs:dateTime($Timestamp), xs:dayTimeDuration(‘PT2H’)) – xs:dateTime(‘1970-01-01T00:00:00’)) div xs:dayTimeDuration(‘PT1S’))”

    Hier wandel ich den Timestamp-String in ein XSLT-dateTime um, ziehe fix 2 Stunden ab und wandel es in ein UNIX Date um. Allerdings möchte ich ja hier dynamisch auf die jeweilige Sommer/Winterzeit reagieren und muss dementsprechend evtl nur 1 Stunde abziehen. Ich habe bisher keine Möglichkeit gefunden dies über XSLT zu tun.

    Wichtig ist hierbei anzumerken, dass es nicht ausreicht, die aktuelle Zeitzonen Differenz zu ermitteln, da wie in dem Beispiel auch rückwirkend Daten umgewandelt werden müssen.

    Wie kann ich das ganze, am besten mit Transconnect/XSLT Bordmitteln umsetzen? Muss hier auf Java Funktionalitäten im XSLT zurückgegriffen werden?

    Danke!

    0
    0
Ansicht von 1 Antwort (von insgesamt 1)
  • Antworten
    Mit XSLT Bordmitteln ist es leider nicht möglich, die Zeitzone zu ermitteln. Darum kann die benötigte Zeitdifferenz nicht dynamisch ermittelt werden.

    Der im Standardumfang von TRANSCONNECT enthaltene XSLT 2.0 Transformer “Saxon” unterstützt in der Home Edition (HE) leider nicht die benötigten Erweiterungen, welche in der kommerziellen Versionen enthalten sind und Zugriff auf die Zeitzone bieten.

    Sie können deshalb nur mit XSLT 1.0 und unter Nutzung von Java die gewünschte Konvertierung vornehmen.

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                                  xmlns:java="http://xml.apache.org/xslt/java">
    <xsl:variable name="formatLocal">yyyy-MM-dd'T'HH:mm:ss</xsl:variable>
    <xsl:variable name="locale" select="java:java.util.Locale.forLanguageTag( 'de' )" />
    <xsl:variable name="sdf"    select="java:java.text.SimpleDateFormat.new( $formatLocal, $locale )" />
    
    <xsl:template match="/">
    <xsl:variable name="value" select="XPath of local date value" /> 
    <xsl:variable name="dtLocal" select="java:parse( $sdf, $value )" />
      <Root>
         <DatumLokal><xsl:value-of select="$value" /></DatumLokal>
         <DatumUTC><xsl:value-of select="java:getTime( $dtLocal )" /></DatumUTC>
      </Root>
    </xsl:template>
    </xsl:stylesheet>

    Ihr TRANSCONNECt-Team

    2
    0
Ansicht von 1 Antwort (von insgesamt 1)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.