Suse 10 で mktime(struct tm*) 関数を使用しています。
現在、夏時間が有効になっていると、奇妙な動作が発生することに気付きました。たとえば、9 月 15 日の 18:10 に夏時間を有効にして、夏時間補正を 30 分間とします。ここで、日付が Sep 15 18:10 で tm_isdst が 0 に設定されている tm 構造体で mktime を呼び出すと、tm_isdst が 1 に設定されている場合にのみ、tm 構造体に同じ値が返されます。
しかし、tm_isdst を 1 に設定して日付を 9 月 15 日 18:10 として渡すと、時刻が 17:40 に変更されていることがわかります。tm 構造体でのこの修正は、9 月 15 日 18:10 から 9 月 15 日 18:40 までの経過時間で通知されますが、その後は時間の修正は行われず、dst フラグは有効のままです。9 月 16 日 18:10 として日付を渡しても、時刻の修正は行われず、dst フラグは有効のままです。
私は完全に混乱しています。これは mktime の正しい動作ですか?