Попробуй так:
<xsl:template match="News">
<dateTime>
<xsl:call-template name="datetime.ticks-to-datetime">
<xsl:with-param name="datetime.ticks" select="@DateTime" />
</xsl:call-template>
</dateTime>
</xsl:template>
<xsl:template name="datetime.ticks-to-datetime">
<xsl:param name="datetime.ticks"/>
<xsl:variable name="JDN" select="floor($datetime.ticks div 864000000000) + 1721426" />
<xsl:variable name="rem-ticks" select="$datetime.ticks mod 864000000000"/>
<xsl:variable name="f" select="$JDN + 1401 + floor((floor((4 * $JDN + 274277) div 146097) * 3) div 4) - 38"/>
<xsl:variable name="e" select="4*$f + 3"/>
<xsl:variable name="g" select="floor(($e mod 1461) div 4)"/>
<xsl:variable name="h" select="5*$g + 2"/>
<xsl:variable name="d" select="floor(($h mod 153) div 5) + 1"/>
<xsl:variable name="m" select="(floor($h div 153) + 2) mod 12 + 1"/>
<xsl:variable name="y" select="floor($e div 1461) - 4716 + floor((14 - $m) div 12)"/>
<xsl:variable name="H" select="floor($rem-ticks div 36000000000)"/>
<xsl:variable name="M" select="floor($rem-ticks mod 36000000000 div 600000000)"/>
<xsl:variable name="S" select="$rem-ticks mod 600000000 div 10000000"/>
<xsl:value-of select="format-number($y, '0000')" />
<xsl:value-of select="format-number($m, '-00')"/>
<xsl:value-of select="format-number($d, '-00')"/>
<xsl:value-of select="format-number($H, ' 00')" />
<xsl:value-of select="format-number($M, ':00')"/>
<xsl:value-of select="format-number($S, ':00')"/>
</xsl:template>
Применительно к вашему входному примеру, результат будет:
<dateTime>2016-10-14 14:50:15</dateTime>
Теперь это микросекунда unixtimestamp. отключение последних 6 цифр, чтобы получить секунды, дает вам 9 ноября 22127 года, что немного в будущее ... Так точно, ЧТО это число представляет? От куда это? –
@Marc B: действительно, 18-значное число OP, похоже, исходит из DateTime.Now.Ticks, как показано здесь: https://dotnetfiddle.net/M6MLsK – YSharp
OP: метка даты, указанная в вашем вопросе, не выражена в «микросекундах» (и с каких пор это было бы так или иначе? Вы должны это упомянуть); это, скорее всего, результат DateTime.Ticks, единица измерения которого составляет десятую часть микросекунды (10 миллионов из них в секунду): https://msdn.microsoft.com/en-us/library/system. datetime.ticks (v = vs.110) .aspx – YSharp