Documentation index

タイムゾーン(Timezones)

タイムゾーンが ビルド環境の一部 に含まれていない場合でも、異なるタイムゾーンでビルドした場合のビルド結果のことを考慮しなければなりません。

ビルド時のタイムゾーンを書き込まない

ツールによっては日時にタイムゾーンを含める場合があります。

$ LC_ALL=C date -d'@2147483647' --rfc-2822
Tue, 19 Jan 2038 04:14:07 +0100

UNIX時間 の形式(エポック と呼ばれています)で時刻を指定したとしても、UTC+0100 と異なるタイムゾーンで出力すると、再現性を損ねてしまう場合があります。 簡単な解決方法は、適切な環境変数を設定して、強制的にタイムゾーンを UTC にすることです。

$ LC_ALL=C date -u -d'@2147483647' --rfc-2822
Tue, 19 Jan 2038 03:14:07 +0000

専用の引数がなければ環境変数 TZ で指定できる場合があります。

$ TZ=UTC LC_ALL=C date -d'@2147483647' --rfc-2822
Tue, 19 Jan 2038 03:14:07 +0000

タイムゾーンを含まない書式にも関連する問題があります。 例えば Zip アーカイブを展開したときのファイル変更日時を維持するには、アーカイブを作成したときと同じタイムゾーンにしなければならないのです。

タイムゾーンを含む書式を使用する

“Wed, 21 Oct 2015 11:18:50” のような日時文字列には、タイムゾーンの解釈に関する曖昧性があります。

再現性のあるビルドにおいて、日時文字列にはタイムゾーンを含めるのが一番です。 代替案は UTC を前提にすることです。

何らかのタイムゾーンを指定したビルドシステムにおけるタイムゾーンを含まない日時文字列の扱いを理解するのは困難です。 例えば、サマータイムの異なるタイムゾーン同士で時間差を計算する場合など。 タイムゾーンによって方針も異なるため、ビルドを実行するときのタイムゾーンによっては、ビルドを実行する時間が伸び縮みしてしまうのです。


Documentation index

Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches welcome via our Git repository (instructions) or via our mailing list. • Full contact info