/ / Prevedenie dátumu na formát yyyy-MM-dd'T'HH: mm: ss.S'Z 'v xslt2.0 - xslt-2.0

Premeniť dátum na formát yyyy-MM-dd'T'HH: mm: ss.S'Z 'v xslt2.0 - xslt-2.0

Mám vstupný formát dátumu ako "2014-04-14T00: 00: 00-05: 00" a chcete previesť na formát "2014-04-14T00: 00: 00.5Z" (tj rrrr-MM-dd "T" HH: mm: ss.s "Z").

Som schopný urobiť to v jave pomocou SimpleDateFormat triedy, ale musím urobiť to isté pomocou XSLT2.0.

Možnosti vyskúšané: format-dateTime ($ dt, "[Y0001] - [M01] - [D01] T [H01]: [m01]: [s01].

Ale výsledkom tejto voľby bol "2014-04-14T00: 00: 00.000Z", ktorý má byť "2014-04-14T00: 00: 00.5Z" (očakávaný výstup).

Akákoľvek pomoc je vítaná. Vďaka!

odpovede:

2 pre odpoveď č. 1

Dátum, ktorý ste uviedli, nemá zlomoksekúnd (čo hľadá vo vašej funkcii [f001]). Má časové pásmo -05: 00 (východný štandardný čas). Pozrite si popis xs: dateTime tu: http://www.w3.org/TR/xmlschema-2/#dateTime

ETA: Nemyslím si, že formát, ktorý chcete, bude možné len pomocou funkcie formátu dátumu XSL, pretože stratíte pozitívny / negatívny časový posun pred časovým posunom. Niečo takého vás priblíži:

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

sa vracia: 2014-04-14T00: 00: 00.GMT-5Z

Pomocou jednoduchého reťazca môžete odstrániť "GMT-". Možno budete chcieť byť opatrní, ak budete niekedy musieť previesť tento dátum späť, alebo do iného formátu.


0 pre odpoveď č. 2

Váš cieľový formát

2014-04-14T00: 00: 00.5Z

(v ktorom 5Z predstavuje časovú zónu -05:00) je úplne neštandardný a veľmi nežiadúci, pretože je pravdepodobné, že bude nesprávne interpretovaný, čo znamená "pol sekundy po polnoci, UTC." Nie je teda prekvapujúce, že by to malo byť trochu zložité. Ak ste nútení používať tento formát z nejakého dôvodu, potom budete musieť vygenerovať časovú zónu ručne, čo môžete urobiť tým, že začnete timezone-from-dateTime($x) div xs:dayTimeDuration("PT1H").