2017-05-10 8 views
0

OracleでTZ_Offset関数が行うことができるXSLTのタイムゾーンから時間オフセットを計算する必要がありました。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タイムゾーン 名の形で供給されている場合は、 がフォーマットされた日付や時刻はタイムゾーンのオフセットに調整されています。これは仕様が言うことです該当するのは タイムゾーンです。たとえば、xs:dateTimeの値2010-02-15T12:00:00Z が、$ place引数をAmerica/New_Yorkに設定してフォーマットされている場合、 の出力は、2010-02-15T07:00: 00〜05:00は でした。可能であれば、この調整により夏時間が考慮されます( )。問題の日付がニューヨークの夏時間の 時間になると、-PT5Hよりもむしろ ではなく、タイムゾーンオフセット-PT4Hに調整されます。夏時間を使用する調整は のみ可能で、値には日付が含まれ、日付はタイムゾーンデータベースでカバーされる の範囲内です。

したがってformat-dateTime(current-dateTime(), '[Z00:00]',(),(), 'America/New_York')は、あなたが関数を呼び出すときに夏時間にいると仮定して、 "-05:00"を返す必要があります。これはSaxonでも動作するはずですが、他の実装についてはわかりません。

私は、「US/Eastern」をタイムゾーン名として使用していません。Olsen/IANAタイムゾーンデータベースは、政治的紛争を避けるために大陸/都市フォーマットを使用します。基礎となるデータベースに応じて動作する場合と動作しない場合があります。

関連する問題