/ /日付をyyyy-MM-dd'T'HH:mm:ss.S'Zという形式に変換する。xslt2.0 - xslt-2.0

xslt2.0 - xslt-2.0のyyyy-MM-dd'T'HH:mm:ss.S'Zの形式に日付を変換する

私は入力日付フォーマットを「2014-04-14T00:00:00-05:00」とし、フォーマット「2014-04-14T00:00:00.5Z」(yyyy-MM-dd "T" HH:mm:ss.S "Z")。

私はSimpleDateFormatクラスを使用してjavaでこれを行うことができますが、私はXSLT2.0を使って同じことをする必要があります。

オプション試行:format-dateTime($ dt、 "[Y0001] - [M01] - [D01] T [H01]:[m01]:[s01]。[f001] Z")

しかし、このオプションの結果は "2014-04-14T00:00:00.000Z"であり、 "2014-04-14T00:00:00.5Z"(予想される出力)となっています。

どんな助けもありがとうございます。ありがとう!

回答:

回答№1は2

あなたが与えた日付は分数を持っていません秒(これは[f001]があなたの関数で探しているものです)。 -05:00(東部標準時)のタイムゾーンを持ちます。 xs:dateTimeの説明を参照してください: http://www.w3.org/TR/xmlschema-2/#dateTime

ETA: タイムゾーンオフセットの前にポジティブ/ネガティブを失うので、あなたが望むフォーマットはXSLの日付フォーマット関数を使って可能になると思う。これのようなものはあなたを近づけるでしょう:

<xsl:value-of select="format-dateTime($dt, "[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01].[z]Z")"/>

戻り値: 2014-04-14T00:00:00.GMT-5Z

単純な文字列関数を使って "GMT-"を取り除くことができます。ただし、この日付を元に戻す必要がある場合や、別の形式に変換する必要がある場合は、注意してください。


回答№2の場合は0

ターゲットフォーマット

2014-04-14T00:00:00.5Z

(5Zはタイムゾーン-05:00)は完全に非標準的なものであり、 "UTCの半分過ぎの深夜を意味する"と誤解される可能性が高いため、非常に望ましくないことになるので、生成するのはちょっと難しいことではない。なんらかの理由でこの形式を使用することを余儀なくされた場合は、手動でタイムゾーン部分を生成する必要があります。 timezone-from-dateTime($x) div xs:dayTimeDuration("PT1H").