2016-10-14 13 views
0

「マイクロ秒」のXMLファイルの日付と時刻を、XSLT 1.0スタイルシート変換を使用して人間が判読可能な形式(2016-10-14)に変換したい場合は、これがxmlです下記内容:xslのマイクロ秒から読み取り可能な日時

<?xml version="1.0" encoding="UTF-8"?> 
<News DateTime="636120534151823750" Id="5241"> 
</News> 

多くのおかげで、

+0

Nowayはマイクロ秒のunixtimestampです。最後の6桁を取り除いて秒を得ると、22127の11月9日が得られます。これは将来のことにちょっと差があります。それはどこから来たのですか? –

+0

@Marc B:確かにOPの18桁の数字は、DateTime.Now.Ticksから来ているようです。https://dotnetfiddle.net/M6MLsK – YSharp

+0

OP:あなたの質問に表示されている日付のタイムスタンプは表現されていません"マイクロ秒"で(そしていつからそうなっているのでしょうか?何とか言及すべきです)。代わりにDateTime.Ticksの結果であるように見えます。単位はマイクロ秒(1/10秒)の10分の1です(https://msdn.microsoft.com/en-us/library/system)。 datetime.ticks(v = vs.110).aspx – YSharp

答えて

0

はこのようにそれを試してみてください。

<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> 
+0

私の問題を解決してくれてありがとう、ありがとう、同じように時間を計算することは可能でしょうか? – JohnMiller

+0

質問を編集して、正確な結果を追加できますか? –

+0

あなたが提供した解決策はまさに私が望むものですが、私の将来の参考資料として、時間をどのように得るかを知りたいと思っています。 2016-10-17 12:30:00 助けて。 – JohnMiller

関連する問題