質問

XSLT 1.0を使用して、次の形式で日付を受け取ります。

20111129060804

そして、私はそれらの2つの間の違いを計算できる必要があります。でも、 拡張機能は使用できません.

他の制限もあります:

  • 私はXSLT内で使用できる名前空間について制限されています。
  • また、XSL StyleSheet(サードパーティアプリケーション)を使用している場合、XSL内の挿入/インポートアクションを適切に処理しません。

したがって、実際には、私が使用する必要があるXSLTは、呼び出された、または参照されるものはすべてXSLT自体にある必要があるという点で、ほとんど自己包括的でなければなりません。

日付と時刻をとり、ジュリアンのシリアル番号に変換し、Excelのように日付数学を処理することを考えました。例 -

09/14/2011 08:19:37 = 40800.346956018500000
09/15/2011 12:22:46 = 40801.515810185200000
difference 1 day 4 hours 3 minutes and 9 seconds
difference = 1.168854166666280

小数のすべてが日数であり、小数の右側がすべて時間内にある場合(すなわち.16854166666280 * 24 = 4.052499999990680、または4時間と0.0525パーセント、または3.15分)。

拡張機能を使用せずにXSLT 1.0でこのタイプの経過日数学を行ったことがありますか?

既存のコードセットがある場合は、考え、提案、または参照に感謝します。

編集 -

私は上記を進めることに決め、時間の変換にひっかかった。

私が使用している例は次のとおりです:開始時間= 08:19:37終了時間= 15:58:33

これは7:38:56の期間/差です(ところで、これは同日計算のみです - 終了時間<開始時間または日が> 0の場合、エラーをスローする必要があります)。

その時に到着するために、私はすべてを秒に変換し、数学を行います。 08:19:37は29977に変換されます(時間で8 * 3600 + 19 * 60分秒 +秒)。 15:58:33は57513に変換されます(15 * 3600時間 + 58 * 60分秒 +秒)。

違いは27536秒です。

I get: 27536/3600 =7.6488888888888888888 <-- the integer part is hours then the difference of 27536 - 25200 = 2336 <-- the 25200 = 7 hours * 3600 seconds 2336/60 = 38.93333333333333333 <-- the integer part is 38 minutes次に、上から2336-2280 = 56秒の差。

ただし、これらの数値の整数部分をつかもうとすると、丸めが起こります。

<xsl:template name="time-difference">  
<xsl:param name="from-hour"/>  
<xsl:param name="from-minute"/>  
<xsl:param name="from-second"/>  
<xsl:param name="to-hour"/>  
<xsl:param name="to-minute"/>  
<xsl:param name="to-second"/>  
<xsl:variable name="f-secs" select="($from-hour * 3600) + ($from-minute * 60) + ($from-second)"/>  
<xsl:variable name="t-secs" select="($to-hour * 3600) + ($to-minute * 60) + ($to-   second)"/>  
<xsl:variable name="sec-diff" select="$t-secs - $f-secs"/>  
<xsl:variable name="daysec-diff" select="format-number(($sec-diff div 86400),'#')"/>  
<xsl:variable name="q" select="($sec-diff div 3600)"/>  
<xsl:variable name="t-hrs-diff" select="format-number(($sec-diff div 3600),'00')"/>  

上記の変数Qには7.64888888888888888888(これは正しい)がありますが、T-hrs-diffが発生すると、「08」が入っていると、時間が間違っています。

数の整数部分をつかむ他のフォーマットの試みは、丸めにつながることを知っています。

の外側 前にサブストリング & サブストリング後 - それはおもう)次の計算で使用する前に結果を数値に変換する必要があります - 数字の変更されていない整数部分をつかみ、文字列から数値への変換を行う必要はありませんか?

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top