Как получить время из значения dateTime? - PullRequest
4 голосов
/ 16 июня 2011

У меня есть атрибуты XML, <EventDate>2011-06-16 08:00:00</EventDate>, и я хочу извлечь 08:00:00 с помощью XSLT.

Я видел, что было fn:hours-from-dateTime(datetime) благодаря w3schools .Поэтому мне интересно, почему нет fn:time-from-dateTime(datetime)?

И как мне его использовать?Мой текущий код:

<td><xsl:value-of select="@EventDate"/></td>

, которые правильно отображают дату и время.Однако:

 <td><xsl:value-of select="hours-from-dateTime(@EventDate)"/></td>

Не работает.

Наконец, есть ли что-то более элегантное , чем делать:

<td><xsl:value-of select="hours-from-dateTime(@EventDate)"/>:
<xsl:value-of select="minutes-from-dateTime(@EventDate)"/>:
<xsl:value-of select="seconds-from-dateTime(@EventDate)"/></td>

?

Ответы [ 3 ]

6 голосов
/ 17 июня 2011

Просто используйте функцию приведения или конструктора:

<xsl:value-of select="xs:time(@dateTime)"/>

Предполагается, что атрибут @dateTime имеет тип xs: dateTime в результате обработки схемы.Если вы не используете процессор с поддержкой схемы, вам нужно сначала преобразовать его в xs: dateTime:

<xsl:value-of select="xs:time(xs:dateTime((@dateTime))"/>

и, конечно, этот интервал между датой и временем должен быть равен "T"."чтобы это работало.

2 голосов
/ 17 июня 2011

Спасибо за оба предложения, но так как я не нуждался в них как в переменной dateTime, я просто обработал ее как строку и использовал:

<xsl:value-of select="substring-after(@EventDate, ' ')"/>
1 голос
/ 17 июня 2011

В дате, с которой вы начинаете, отсутствует разделитель времени 'T', поэтому вам нужно вставить его, если вы хотите использовать функции dateTime.

Я предлагаю следующее:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs fn" version="2.0"
   xmlns:fn="http://www.w3.org/2005/xpath-functions">
   <xsl:template match="/">
    <foo>
        <xsl:variable name="time" select="translate(string(/input), ' ', 'T')"/>
        <xsl:value-of select="fn:format-dateTime(xs:dateTime($time), '[h]:[m01]:[s01]')"/>        
    </foo>
</xsl:template>

Это предполагает ввод данных следующим образом:

<input>2011-06-16 09:00:00</input>

Для получения дополнительной информации см. format-dateTime функция в спецификации xslt20.Существует много различных вариантов форматирования значения даты и времени с помощью аргумента «строка изображения».

...