将日期转换为格式yyyy-MM-dd' HH:mm:ss.S' Z'在xslt2.0中

时间:2014-04-21 13:20:59

标签: xslt-2.0

我的输入日期格式为' 2014-04-14T00:00:00-05:00'并希望转换为格式' 2014-04-14T00:00:00.5Z' (即,yyyy-MM-dd' HH:mm:ss.S' Z')。

我可以使用SimpleDateFormat类在java中执行此操作,但我需要使用XSLT2.0执行相同操作。

已尝试的选项:format-dateTime($ dt,&#39; [Y0001] - [M01] - [D01] T [H01]:[m01]:[s01]。[f001] Z&#39;)< / p>

但是这个选项结果是&#39; 2014-04-14T00:00:00.000Z&#39;本应该是2014-04-14T00:00:00.5Z&#39; (预期产出)。

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分: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-'。但是,如果您需要将此日期转换回另一种格式,您可能需要小心。

答案 1 :(得分:0)

您的目标格式

2014-04-14T00:00:00.5Z

(其中5Z代表时区-05:00)是完全非标准的,并且非常不受欢迎,因为它可能被误读为“午夜半秒,UTC”。所以生成它应该有点棘手并不奇怪。如果由于某种原因你被迫使用这种格式,那么你将不得不手动生成时区部分,你可以从timezone-from-dateTime($x) div xs:dayTimeDuration('PT1H')开始。