唯一のサービスインスタンスは、処理中のデータに基づいてタイムゾーンを変更する必要があります。したがって、TZ
各データ等を処理する前に環境変数を変更することができる。
TZ
設定されたタイムゾーンと夏時間(DST)の値を動的に変更する最良の方法は何ですか? Olson形式を使用する必要がありますか、それともPOSIX形式を使用する必要がありますか? Olson形式を使用してDSTをオフにできますか?
次の特性を考慮してください。
タイムゾーン情報のソース:
タイムゾーンを検出する方法は、処理する必要があるすべての情報から来ます。つまり、次のようになります。
- 絶対オフセット(UTCベース)
- DSTを適用する必要があるかどうかを示すフラグ。このフラグは、DSTが進行中かどうかを示すのではなく、現在のDST設定が適用されているかどうかを示します。
限界:
- DST フラグは、すべての可能な時間帯に対して DST 構成が 1 つしかないと仮定します。ただし、サービスはDSTが1つしかないタイムゾーンセットで実行する必要がありますが、一部のタイムゾーンには夏時間が適用され、一部のタイムゾーンには適用されません。
- サービスは、
TZ
POSIX形式による変数のDST設定を認識しませんMm.w.d/time
。
考えられる解決策:
サービスは、TZ
次のようにPOSIX形式でデフォルトのタイムゾーンと対応するDST(他のすべての予想タイムゾーンに固有のもの)を設定したと予想できます。TZ=XXXST3XXXDT,M11.1.1/0,M3.1.1/0
サービスがタイムゾーンを変更する必要があるときはいつでも、TZ
DSTフラグが要求するように元のDST設定を消去または維持してオフセットを調整し、元の変数を変更します。
この基本タイムゾーンの絶対オフセットの例を検討してくださいTZ=XXXST3XXXDT,M11.1.1/0,M3.1.1/0
。
- tzoffset=5, dst=false
TZ=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)が望ましいです。