2016-03-07 131 views
0

我需要將日期從12小時格式轉換爲24小時格式。在XSLT1.0或XSLT2.0中將12小時格式日期轉換爲24小時

輸入: 2016年1月27日下午7時01分36秒

預期輸出: 201601271901(爲yyyymmddhhmm)

我用格式DATETIME()在我的代碼功能,我得到錯誤

<xsl:value-of select="format-dateTime(part_need/promised_dt,'[Y0001][M01][D01][H01][m01]')"/> 

錯誤:

說明:FORG0001:無效的日期時間值「2016年1月27日下午7時01分36秒」(非數字年份組成)

在這個問題上

回答

0

您的輸入不是有效的ISO 8601日期/時間,因此您無法使用內置的日期/時間功能。

嘗試,而不是像(XSLT 2.0):

<xsl:template match="inputdate"> 
    <xsl:copy> 
     <xsl:variable name="dte" select="tokenize(.,'/|\s|:')" /> 
     <xsl:value-of select="$dte[3]" /> 
     <xsl:value-of select="$dte[1]" /> 
     <xsl:value-of select="$dte[2]" /> 
     <xsl:variable name="h24" select="xs:integer($dte[4]) mod 12 + 12 * xs:integer($dte[7]='PM')" /> 
     <xsl:value-of select="format-number($h24, '00')" /> 
     <xsl:value-of select="$dte[5]" /> 
    </xsl:copy> 
</xsl:template> 

注意,這裏假設你的日子是零填充到兩個數字(因爲是你月)。

如果您需要在多個地方使用此功能,請考慮將其轉換爲功能。

+0

感謝您的回覆。它正在使用上面的代碼。 – Jyo

0

format-dateTime請幫助需要一個xs:dateTime?作爲第一個參數。 part_needed/promised_dtnode

如果您具有標準ISO格式的日期時間(例如「2006-01-27T19:01:36」),則可以使用xs:dateTime(part_needed/promised_dt)

撒克遜沒有非標準的日期時間解析器幫助器,因此您需要使用xs:dateTime(xs:date(year,month,day), xs:time(hours, minutes, seconds))構造函數並使用類似substring(part_needed/promised_dt,1,2)的內容來獲取每個日期/時間部分。

+0

感謝您對該問題的解釋。我會嘗試以上功能 – Jyo

相關問題