2011-10-17 31 views
2

我在標準UTC格式的XML結果中保存了一些時間戳。XSL datetime,刪除時間並將其縮小到時間

我想要做的就是將其重新轉換爲人類可讀的時間。沒有時區附錄。據我已經能夠得到這麼遠是:

format-dateTime(
    xs:dateTime(
    adjust-dateTime-to-timezone(
     xs:dateTime(@thevalue),xs:dayTimeDuration('P0DT4H') 
    ) 
),'[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]' 
) 

其中@thevalue是這樣的:2006-02-15T17:00:00

它讓我頭疼,因爲格式化返回17:00時。如果我剝開格式,日期時間的層,看看有什麼調整,日期時間函數返回時,它給

2006-02-15T17:00:00+04:00

...和我真正希望看到的是21:00 ...所以非常沮喪。任何人都處理過這個?

回答

2

這是一個轉變,你想要做什麼

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="vDateTime" as="xs:dateTime" 
    select="xs:dateTime('2006-02-15T17:00:00+00:00')"/> 

<xsl:template match="/"> 
    <xsl:sequence select= 
    "adjust-dateTime-to-timezone($vDateTime, 
           xs:dayTimeDuration('P0DT4H') 
           )"/> 
</xsl:template> 
</xsl:stylesheet> 

當應用於任何XML文檔(未使用),結果是

2006-02-15T21:00:00+04:00 

而完整的解決方案是:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="vDateTime" as="xs:dateTime" 
    select="xs:dateTime('2006-02-15T17:00:00+00:00')"/> 

<xsl:template match="/"> 
    <xsl:variable name="vadjustedDateTime" select= 
    "adjust-dateTime-to-timezone($vDateTime, 
           xs:dayTimeDuration('P0DT4H') 
           )"/> 

    <xsl:sequence select= 
    "format-dateTime($vadjustedDateTime, 
        '[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]' 
        ) 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

產生這樣的結果

02/15/2006 21:00:00 
+0

你的評論讓我大大明白我的問題。我無法修改我保存日期的格式(UTC,但沒有+ HHMM符號),但是我可以通過將它轉換爲+00:00,然後應用+04:00,然後調整日期到時區,然後格式化。謝謝! – yep

+0

@yep:不客氣。 –