Преобразование времени ISO8601 в 12-часовой формат - PullRequest
0 голосов
/ 19 апреля 2020

XSLT 2.0 - Кислород

<string>encounterDatetime</string>
<string>2020-04-05T16:36:00.000-0500</string>
<string>patient</string>

Мне нужно использовать XSLT, чтобы преобразовать это и отобразить в основном шаблоне. Я немного поработал с x path, чтобы найти каждый фрагмент функции времени. Помимо этого, боюсь, я не знаю, как поступить. По общему признанию, я ужасен в xml. Я только предоставил немного данных. Вот то, что я имею до сих пор, я выяснил путь x (я думаю), но я так застрял. Мне все равно, если мне придется избавиться от следующего кода, если у вас есть лучшее решение.

<xsl:template name="TFTime">
    <xsl:param name="TS"/>
    <xsl:variable name="H" select="number(substring($TS, 1, 2))"/>
    <xsl:variable name="M" select="number(substring($TS, 4, 2))"/>
    <xsl:variable name="S" select="number(substring($TS, 7, 2))"/>

    <!-- how to proceed? -->

</xsl:template>

Любая помощь будет принята с благодарностью. Я пытался использовать школы W3, но я чувствую, что мои навыки не достаточно адекватны, чтобы понять их объяснения.

Ожидаемый результат будет примерно таким:

11: 00 PM / AM

Мне не нужны секунды, и я уже понял, как извлечь свидание.

На бумаге t = 0, затем t + 12

t> 12 вычесть 12 из времени

ничего не делать, если оно меньше 12.

У меня есть ощущение, что мне следует использовать 11 здесь для удобства, как только я доберусь до той части, где мне нужно добавить AM и PM

1 Ответ

1 голос
/ 20 апреля 2020

Короче говоря, функция formate-dateTime() - это то, что вы ищете, по крайней мере, если вы работаете в XSLT 2.0 (или выше), поскольку она недоступна в XSLT 1.0.

Самая большая проблема в этом контексте заключается в том, что ваша строка dateTime не соответствует типу xs:dateTime, определенному в W3 C XML Язык определения схемы (XSD) 1.1 Часть 2: Типы данных , так как для него требуется смещение часового пояса в формате (+|-)HH:mm, т.е. -05:00 в приведенном выше примере. Есть два варианта решения этой проблемы:

  1. , учитывая, что вам не нужна информация о часовом поясе, которую можно извлечь из строки, поскольку в xs:dateTime это единственный удаляемый параметр.
  2. если вам нужна информация о часовом поясе, вы должны будете вставить : как делитель между часами и минутами.

Я go перешлю с »1.«:

<xsl:template name="TFTime">
        <!-- a string that looks like a xs:dateTime except for the wron timezone formatting -->
        <xsl:param name="TS" as="xs:string"/>
        <!-- cut the wrongly formatted timezone from the string and convert the string to xs:dateTime  -->
        <xsl:variable name="TS-noTimezone" select="xs:dateTime(substring($TS, 1, 23))" as="xs:dateTime"/>
        <!-- apply function format-dateTime($input, $pictureString)
             [h01] hour in the 12h realm (h), as two-digit (01)
             :     just a string
             [m01] minutes (m), as two-digit (01)
             [PN,2-2] a.m. / p.m. format (P), in capitals (N), exactly 2 characters long (,2-2), as otherwise it would contain colons
        -->
        <xsl:value-of select="format-dateTime($TS-noTimezone, '[h01]:[m01] [PN,2-2]')"/>
    </xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...