2017-05-10 76 views
0

我需要計算XSLT中時間偏移量的時間偏移量,它可以完成TZ_Offset函數在Oracle中執行的操作。計算XSLT中的時區偏移量等於oracle TZ_OFFSET函數

例如,在Oracle

Select TZ_Offset('US/Eastern') from DUAL; --returns '-04:00' 

是否有XSLT的功能,可以做同樣的事情?

+0

我不這麼認爲。這不需要計算,而是從TZ數據庫中查找。 –

+0

我要美國/東部被翻譯成 -04:00。希望清除 – rpfun12

+0

嗯,重點是美國/東部時區的偏移量可以是-4:00或-5:00,具體取決於夏令時是否生效。爲了知道它是否是,您需要在[tz數據庫](https://en.wikipedia.org/wiki/Tz_database)中查找該區域的DST規則。 XSLT不會爲你做這件事 - 至少不是XSLT 1.0或2.0(在XSLT 3.0中可能是這樣)。 –

回答

0

沒有直接執行此操作的標準XSLT函數,但您可以在XPath 3.0/3.1中爲此使用format-dateTime。這就是規範說:

如果$位置的參數是由實施認可的IANA時區 名的形式提供,然後被格式化的日期或時間 調整到區偏移適用於 時區。例如,如果使用設置爲America/New_York的$ place參數格式化xs:dateTime值2010-02-15T12:00:00Z ,則 的輸出將如同值2010-02-15T07:00: 00-05:00已提供 。在可能的情況下,此調整將夏令時考慮在內 ;如果有問題的日期屬於紐約的夏令時 時間,則將其調整爲時區偏移量-PT4H而不是 比-PT5H。使用夏令時進行調整僅限於 ,其中值包括日期,並且日期位於時區數據庫覆蓋的 範圍內。

所以format-dateTime(current-dateTime(), '[Z00:00]',(),(), 'America/New_York')應該返回「-05:00」,假設您在夏令時時調用該函數。這應該在撒克遜工作,但我不知道其他實現。

我還沒有遇到過「美國/東部」作爲時區名稱:奧爾森/ IANA時區數據庫通常使用大陸/城市格式來避免政治糾紛。它可能會或可能不會工作,這取決於底層數據庫。