XslCompiledTransform с XSLT 1,0 мс: формат-время () Часовой пояс - PullRequest
2 голосов
/ 05 сентября 2011

Я работаю с XslCompiledTransform объектом и пытаюсь разобрать DateTime объект. Он работает , но показывает только дату по Гринвичу. Когда я отлаживаю код, объект имеет правильное значение (GMT + 2)

Я использую это в XSLT:

ms:format-time(order/@orderDate, 'H:m', 'NL-nl')

Выход имеет двухчасовую разницу с правильным значением. Это можно решить с помощью XSLT 1.0 и стандартных методов .Net 4 Framework. (С #)

Редактировать: Это можно решить без добавления кода в XSLT https://groups.google.com/d/topic/microsoft.public.xsl/1mPHhh6F62o/discussion

Edit2: Кажется, что у большего количества людей возникают проблемы с форматированием времени в XSLT 1 С разными часовыми поясами: http://forums.tizag.com/showthread.php?t=17429

1 Ответ

1 голос
/ 06 сентября 2011

Хорошо, вот верх моего XSLT:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:ms="urn:schemas-microsoft-com:xslt"
            xmlns:dt="urn:schemas-microsoft-com:datatypes"
            xmlns:user="urn:my-scripts">
    <xsl:decimal-format name="euro" decimal-separator="," grouping-separator="."/>
    <ms:script language="C#" implements-prefix="user">
    <![CDATA[              
         public string correctTime(DateTime dt)
         {
            return dt.ToLocalTime().ToString("HH:mm");
         }
    ]]>
    </ms:script>
    <xsl:template match="/">
    ...

и далее по XSLT некоторая HTML-разметка и использование метода, упомянутого выше:

<tr>
    <td>Tijd:</td>
    <td>
        <xsl:value-of select="user:correctTime(order/@datum)"/>
    </td>
</tr>

В Голландии сейчас (из-за перехода на летнее время) GMT + 2 без использования этого метода он просто преобразовал мое значение в GMT Таким образом, была разница в 2 часа. Разница в 1 час, которую мы имели прежде, не была замечена. Но поскольку сейчас 2 часа, это привлекло наше внимание:)

...