Convertire dateTime a Unix epoca in XSLT
Domanda
Ho una variabile dateTime, e voglio convertirlo in un valore decimale di un'epoca. Come si può fare?
Ho provato ad utilizzare:
seconds-from-duration($time, xs:dateTime('1970-01-01T00:00:00'))
ma semplicemente restituisce 0.
Si prega di consigli. Grazie.
Soluzione
Questa trasformazione :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select="current-dateTime()"/>
<xsl:sequence select=
"( current-dateTime() - xs:dateTime('1970-01-01T00:00:00') )
div
xs:dayTimeDuration('PT1S')
"/>
</xsl:template>
</xsl:stylesheet>
quando applicato su qualsiasi documento XML (non utilizzato), produce il risultato voluto - la data-ora e la sua epoca Unix (il numero di secondi dal 1/1/1970) :
2010-08-12T06:26:54.273-07:00 1281594414.273
Altri suggerimenti
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="https://github.com/ilyakharlamov/pure-xsl/date"
version="1.0">
<xsl:import href="https://raw.github.com/ilyakharlamov/pure-xsl/master/date.xsl"/>
<xsl:template match="/">
<xsl:variable name="time_as_timestamp" select="1365599995640"/>
<xsl:text>time_as_timestamp:</xsl:text><xsl:value-of select="$time_as_timestamp"/><xsl:text>
</xsl:text>
<xsl:variable name="time_as_xsdatetime">
<xsl:call-template name="date:date-time">
<xsl:with-param name="timestamp" select="$time_as_timestamp"/>
</xsl:call-template>
</xsl:variable>
<xsl:text>time_as_xsdatetime:</xsl:text><xsl:value-of select="$time_as_xsdatetime"/><xsl:text>
</xsl:text>
<xsl:text>converted back:</xsl:text>
<xsl:call-template name="date:timestamp">
<xsl:with-param name="date-time" select="$time_as_xsdatetime"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
Output:
time_as_timestamp: 1365599995640
time_as_xsdatetime: 2013-04-10T13: 19: 55.640Z
indietro convertito: 1365599995640
Come xpath che non utilizza divisione, ma estratti dalla durata:
for $i in (current-dateTime()-xs:dateTime('1970-01-01T00:00:00Z'))
return ((days-from-duration($i)*86400)+(hours-from-duration($i)*3600)+(minutes-from-duration($i)*60)+(seconds-from-duration($i)))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow