/ / Конвертирайте датата във формат yyyy-MM-dd'T'HH: mm: ss.S'Z 'в xslt2.0 - xslt-2.0

Преобразувайте датата до формат yyyy-MM-dd'T'HH: mm: ss.S'Z 'в xslt2.0 - xslt-2.0

Имам формата на датата на въвеждане като "2014-04-14T00: 00: 00-05: 00" и бих искал да конвертирам във формат "2014-04-14T00: 00: 00.5Z" (т.е. yyyy-MM-dd) "Т" HH: мм: СС.С "Z").

Аз съм в състояние да направя това в Java, използвайки SimpleDateFormat клас, но аз трябва да направя същото използване XSLT2.0.

Опции Опитани: формат-датаВреме ($ dt, "[Y0001] - [M01] - [D01] T [H01]: [m01]: [s01]. [F001] Z")

Но този резултат е "2014-04-14T00: 00: 00.000Z", който трябва да бъде "2014-04-14T00: 00: 00.5Z" (очакван изход).

Всяка помощ е оценена. Благодаря!

Отговори:

2 за отговор № 1

Датата, която сте дали, няма дробносекунди (което е това, което [f001] търси във вашата функция). Той има времева зона от -05: 00 (Източно стандартно време). Вижте описанието на xs: dateTime тук: http://www.w3.org/TR/xmlschema-2/#dateTime

ЕТА: Не мисля, че желаният от вас формат ще бъде възможен само с помощта на 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-“. Може да искате да бъдете внимателни, ако някога ви се наложи да преобразувате тази дата назад или в друг формат.


0 за отговор № 2

Вашият целеви формат

2014-04-14T00: 00: 00.5Z

(в която 5Z ​​представлява часовата зона -05:00) е изцяло нестандартно и силно нежелателно, тъй като е вероятно да бъде погрешно тълкувано като "половин секунда след полунощ, UTC". Така че не е изненадващо, че трябва да е малко трудно да се генерира. Ако сте принудени да използвате този формат по някаква причина, тогава ще трябва да генерирате частта на часовата зона ръчно, което можете да направите като започнете с timezone-from-dateTime($x) div xs:dayTimeDuration("PT1H").