Il n'y a pas de méthode intégrée pour cela dans XSLT 1.0. Quoi qu'il en soit, cela aurait été plutôt trivial à faire - sauf pour le fait que votre entrée de temps est au format 12 heures. Cela rend le processus assez fastidieux, donc je l'ai divisé le tout à un modèle de traitement:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<node>
<xsl:attribute name="time">
<xsl:call-template name="time-offset">
<xsl:with-param name="time" select="node/@time"/>
</xsl:call-template>
</xsl:attribute>
</node>
</xsl:template>
<xsl:template name="time-offset">
<xsl:param name="time"/>
<xsl:param name="offset" select="1"/>
<xsl:param name="h12" select="substring($time, 1, 2)"/>
<xsl:param name="pm" select="contains($time,'p') or contains($time,'P')"/>
<xsl:param name="h24" select="$h12 mod 12 + 12*$pm"/>
<xsl:param name="newH24" select="($h24 + $offset + 24) mod 24"/>
<xsl:param name="newH12" select="($newH24 + 11) mod 12 + 1"/>
<xsl:param name="am.pm" select="substring('AMPM', 1 + 2*($newH24 > 11), 2)"/>
<xsl:value-of select="concat(format-number($newH12, '00'), substring($time, 3, 4), $am.pm, ' ET')"/>
</xsl:template>
</xsl:stylesheet>
Lorsque la feuille de style ci-dessus est appliqué à l'entrée exemple:
<node time="12:14 am CT" />
le résultat est:
<?xml version="1.0" encoding="UTF-8"?>
<node time="01:14 AM ET"/>
signifie "CT" [Time Zone centrale] (http://en.wikipedia.org/wiki/Central_Time_Zone_%28North_America%29)? Si c'est le cas, vous n'avez besoin d'ajouter qu'une heure à l'heure donnée pour la convertir en fuseau horaire de l'Est (en supposant que vos régions d'intérêt observent les mêmes règles d'heure d'été). Utilisez-vous XSLT 1.0 ou 2.0? –
Oui, fuseau horaire central. XSLT 1.0 – RegEdit
Pouvez-vous poster un exemple de l'entrée XML? –