tm構造体でのtm_isdstフラグの使用について次の疑問があります。マニュアルページとグーグルの結果によると、私はその値が次のように解釈されることを理解しています
A.値0は、DSTが表示された時間有効でないことを示します
B.値1は、DSTが有効であることを示します
C.値が-1の場合、mktimeはDSTが有効かどうかを確認します。
私を混乱させているのはこの3番目のポイントです。私の疑問は、mktimeがDSTを正確に適用する必要があるかどうかをどのように判断できるかということです。
例えば
My Time Zone = GMT + 3:00
DST shifting = +1 Hour at 5:00 AM in January (to keep it simple)
Current UTC time = "01/Jan/2012 00:00:00"
UTC time in seconds time_t timetUTC = X seconds
Hence my time is = "01/Jan/2012 03:00:00"
時間の経過とともに、私の時間値は次のように変化します
"01/Jan/2012 04:00:00" (X + 1 * 60 * 60)
"01/Jan/2012 05:00:00" (X + 2 * 60 * 60)
"01/Jan/2012 05:59:59" (X + 2 * 60 * 60 + 59)
"01/Jan/2012 05:00:00" (X + 3 * 60 * 60)
"01/Jan/2012 06:00:00" (X + 4 * 60 * 60)
私の理解によると
tm tmMyTime = localtime_r(X + 2 * 60 * 60) will set tmMyTime.tm_isdst to 0
tm tmMyTime = localtime_r(X + 3 * 60 * 60) will set tmMyTime.tm_isdst to 1
このように、tm構造の他のすべてのコンポーネントがどちらの場合も等しい場合でも、mktime(tmMyTime)は、tm_isdst値に応じて適切なUTC値を返すことができます。
ここで、tmMyTime.tm_isdst = -1に設定すると、mktimeはどのような値を返しますか?TZ変数、時系列データベースなどについて読みました。それにもかかわらず、mktime()は、2回発生する可能性のあるtm値にDST補正を適用するかどうかを論理的にどのように判断できますか?
タイムゾーンにDSTがありません。したがって、私の理解が正しいかどうかはよくわかりません。私が間違っている場合は訂正してください。あなたの助けは大歓迎です。