実行中のサービスの動的タイムゾーン

実行中のサービスの動的タイムゾーン

唯一のサービスインスタンスは、処理中のデータに基づいてタイムゾーンを変更する必要があります。したがって、TZ各データ等を処理する前に環境変数を変更することができる。

TZ設定されたタイムゾーンと夏時間(DST)の値を動的に変更する最良の方法は何ですか? Olson形式を使用する必要がありますか、それともPOSIX形式を使用する必要がありますか? Olson形式を使用してDSTをオフにできますか?

次の特性を考慮してください。


タイムゾーン情報のソース:

タイムゾーンを検出する方法は、処理する必要があるすべての情報から来ます。つまり、次のようになります。

  • 絶対オフセット(UTCベース)
  • DSTを適用する必要があるかどうかを示すフラグ。このフラグは、DSTが進行中かどうかを示すのではなく、現在のDST設定が適用されているかどうかを示します。

限界:

  • DST フラグは、すべての可能な時間帯に対して DST 構成が 1 つしかないと仮定します。ただし、サービスはDSTが1つしかないタイムゾーンセットで実行する必要がありますが、一部のタイムゾーンには夏時間が適用され、一部のタイムゾーンには適用されません。
  • サービスは、TZPOSIX形式による変数のDST設定を認識しませんMm.w.d/time

考えられる解決策:

サービスは、TZ次のようにPOSIX形式でデフォルトのタイムゾーンと対応するDST(他のすべての予想タイムゾーンに固有のもの)を設定したと予想できます。TZ=XXXST3XXXDT,M11.1.1/0,M3.1.1/0

サービスがタイムゾーンを変更する必要があるときはいつでも、TZDSTフラグが要求するように元のDST設定を消去または維持してオフセットを調整し、元の変数を変更します。

この基本タイムゾーンの絶対オフセットの例を検討してくださいTZ=XXXST3XXXDT,M11.1.1/0,M3.1.1/0

  • tzoffset=5, dst=falseTZ=XXXST5
  • tzoffset=5, dst=true:TZ=XXXST5XXXDT,M11.1.1/0,M3.1.1/0
  • tzoffset=2, dst=true:TZ=XXXST2XXXDT,M11.1.1/0,M3.1.1/0

このソリューションの欠点:

  • サービスは、独自の変数を使用してTZ排他的(分離された)ユーザーとして実行する必要があります。または、プロセスとその排他変数を開始する別の方法。
  • TZサービスは Olson タイムゾーンデータベースを使用できません。 DST設定が毎年変更されると、システム環境は集中的に更新される統合Olsonデータベースを使用できなくなり、毎年サービスのタイムゾーン変数の特定の構成(手動またはカスタム更新)が必要です。 。
  • サービスには、TZ絶対オフセット(UTCベース)または相対基準(タイムゾーン名ベース)のどちらに関係なく、オフセットを変更する方法を知るために新しい構成が必要です。

答え1

これは通常不可能です。ある時点での絶対オフセットとDSTフラグは、時間帯別の情報を指定するのに十分ではありません。 DST の開始時と終了時期に関する情報はありません。現在、夏時間が適用されているかどうかはわかりません。

特定の時点のUTCオフセットだけを知りたいのなら、すでに知っているのです。

他の時点のUTCオフセットを計算する必要がある場合は、追加情報が必要です。タイムゾーンの実際の名前(Olson)が望ましいです。

関連情報