Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 16216] ファイルの概要

このコミットは、Go言語の標準ライブラリであるlib/timeパッケージにおけるタイムゾーンデータ(IANA Time Zone Database)を、2013cバージョンに更新するものです。これにより、最新のタイムゾーン規則がGoアプリケーションに適用され、特定のタイムゾーン関連のバグ(Issue 4553)が修正されます。

コミット

  • コミットハッシュ: 05e8db985aa1d8959d9ca1fedb148470fdcf0bb0
  • 作者: Rob Pike r@golang.org
  • コミット日時: 2013年4月22日 月曜日 16:28:42 -0700
  • コミットメッセージ:
    lib/time: update to IANA 2013c
    This should do it for the release.
    There was a new data set pushed out a couple of days ago.
    
    Fixes #4553.
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/8621044
    

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/05e8db985aa1d8959d9ca1fedb148470fdcf0bb0

元コミット内容

lib/time: update to IANA 2013c
This should do it for the release.
There was a new data set pushed out a couple of days ago.

Fixes #4553.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/8621044

変更の背景

このコミットの主な背景は、IANA Time Zone Databaseの新しいバージョンである2013cがリリースされたことにあります。タイムゾーンの規則は、各国の政府や国際機関の決定により頻繁に変更されるため、ソフトウェアが正確な時刻情報を提供するためには、これらの変更に追随してタイムゾーンデータを更新する必要があります。

コミットメッセージには「Fixes #4553」と明記されており、これはGoのIssueトラッカーにおける特定のバグを修正することを示しています。Issue #4553は、おそらく古いタイムゾーンデータに起因する、特定の地域や期間における時刻計算の不正確さに関する問題であったと推測されます。新しいIANAデータセットを取り込むことで、これらの既知の問題が解決され、Goのtimeパッケージがより正確な時刻情報を提供するようになります。

また、「This should do it for the release.」という記述から、この更新がGoの次期リリースに向けた重要な準備の一部であったことが伺えます。正確なタイムゾーン処理は、多くのアプリケーションにとって不可欠な機能であるため、リリース前に最新のデータに更新することは、安定性と信頼性を確保する上で非常に重要です。

前提知識の解説

IANA Time Zone Database (tzdata)

IANA Time Zone Database(以前はOlson databaseとして知られていました)は、世界のタイムゾーン情報、特に夏時間(DST)の開始・終了日やオフセット変更の履歴を網羅的に収集・管理している公開データベースです。このデータベースは、世界中のオペレーティングシステムやアプリケーションで、正確な時刻とタイムゾーン変換を提供するために広く利用されています。

タイムゾーンの規則は、政治的、地理的、歴史的な理由により頻繁に変更されます。例えば、ある国が夏時間を廃止したり、タイムゾーンの境界を変更したり、新しいタイムゾーンを導入したりすることがあります。IANA Time Zone Databaseは、これらの変更を追跡し、定期的に新しいバージョンをリリースしています。各バージョン(例: 2013c)は、特定の時点での最新のタイムゾーン規則を反映しています。

zoneinfo.zip

Go言語のtimeパッケージは、システムにインストールされているタイムゾーンデータ(通常は/usr/share/zoneinfo以下に配置されるファイル群)を利用するか、またはGo自身の配布物に含まれるzoneinfo.zipというファイルからタイムゾーン情報を読み込みます。

zoneinfo.zipは、IANA Time Zone DatabaseのデータをGoが内部的に利用しやすい形式にまとめたものです。Goアプリケーションがクロスプラットフォームで動作し、かつシステムにタイムゾーンデータが適切に設定されていない環境でも正確な時刻処理を行えるようにするために、このファイルが提供されています。Goのビルドプロセスや、go getなどでパッケージを取得する際に、このzoneinfo.zipが適切に配置されるようになっています。

lib/time/update.bash

lib/time/update.bashは、Goのソースツリー内にあるシェルスクリプトで、IANA Time Zone Databaseの新しいバージョンがリリースされた際に、Goのtimeパッケージが使用するzoneinfo.zipファイルを更新するためのものです。このスクリプトは、IANAの公式ソースから最新のタイムゾーンデータをダウンロードし、それをGoが利用できるzoneinfo.zip形式に変換する処理を自動化します。

このスクリプトは、Goの開発者がタイムゾーンデータを手動で更新する手間を省き、更新プロセスの一貫性と正確性を保証するために存在します。

技術的詳細

Goのtimeパッケージは、time.LoadLocation関数などを用いてタイムゾーン情報をロードする際に、まずシステムが提供するタイムゾーンデータ(Unix系システムでは通常/usr/share/zoneinfo、Windowsではレジストリ)を探します。もしシステムデータが見つからない場合や、Goの内部的なメカニズムで利用する必要がある場合、Goは自身の配布物に含まれるzoneinfo.zipファイルからタイムゾーンデータを読み込みます。

このコミットは、zoneinfo.zipの元となるIANAデータが2013bから2013cに更新されたことを反映しています。具体的には、lib/time/update.bashスクリプト内のCODEDATAという変数の値が2013bから2013cに変更されています。これは、このスクリプトが次に実行される際に、IANAの2013cバージョンのタイムゾーンデータを取得し、それに基づいて新しいzoneinfo.zipを生成するように指示するものです。

zoneinfo.zipファイル自体はバイナリファイルであり、その内容が変更されたことがコミットの差分で示されています(Bin 374065 -> 374530 bytes)。これは、新しいタイムゾーンデータが取り込まれた結果、ファイルサイズがわずかに増加したことを意味します。このバイナリファイルの更新は、Goのtimeパッケージが内部的に参照するタイムゾーン規則が、最新のIANAデータに準拠するようになったことを直接的に示しています。

この更新により、Goアプリケーションは、2013cバージョンのIANAデータに含まれる最新の夏時間規則やタイムゾーンオフセットの変更を正確に処理できるようになります。これにより、特に過去の特定の時点や未来のイベントに関する時刻計算において、より高い精度と信頼性が保証されます。

コアとなるコードの変更箇所

このコミットにおけるコアとなるコードの変更は、以下の2つのファイルに集中しています。

  1. lib/time/update.bash:

    --- a/lib/time/update.bash
    +++ b/lib/time/update.bash
    @@ -7,8 +7,8 @@
     # downloaded from the ICANN/IANA distribution.
    
     # Versions to use.
    -CODE=2013b
    -DATA=2013b
    +CODE=2013c
    +DATA=2013c
    
     set -e
     rm -rf work
    

    この変更では、CODEDATAという変数の値が2013bから2013cに更新されています。これらの変数は、update.bashスクリプトがIANA Time Zone Databaseのどのバージョンをダウンロードして処理するかを決定するために使用されます。

  2. lib/time/zoneinfo.zip:

    --- a/lib/time/zoneinfo.zip
    +++ b/lib/time/zoneinfo.zip
    index c10a42576e..e9ddfff818 100644
    Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ
    

    このファイルはバイナリファイルであるため、具体的な内容の差分は表示されていませんが、ファイルサイズが374065バイトから374530バイトに増加していることが示されています。これは、update.bashスクリプトの実行によって、新しいIANA 2013cデータに基づいてzoneinfo.zipが再生成され、その内容が更新されたことを意味します。

コアとなるコードの解説

lib/time/update.bashにおけるCODEDATA変数の変更は、Goのタイムゾーンデータ更新プロセスにおけるバージョン管理の核心です。CODEはタイムゾーンデータ処理に使用されるコードのバージョンを、DATAは実際に取り込むタイムゾーンデータのバージョンを指します。これらを2013cに更新することで、開発者はGoのビルドシステムに対して、最新のIANAデータセットを使用するように指示しています。

このスクリプトが実行されると、指定されたバージョンのIANAタイムゾーンデータがダウンロードされ、Goのtimeパッケージが内部的に利用できる形式(zoneinfo.zip)に変換されます。したがって、update.bashのバージョン番号を更新し、その結果としてzoneinfo.zipが変更されることは、Goが提供するタイムゾーン情報が最新の状態に保たれることを保証する直接的なメカニズムです。

zoneinfo.zipのバイナリ変更は、この更新プロセスの最終的な成果物です。このファイルには、世界中のタイムゾーンに関する詳細な規則(夏時間の開始・終了、UTCからのオフセットなど)が格納されており、Goのtimeパッケージがこれらの情報を利用して、正確な時刻変換や表示を行います。ファイルサイズの変化は、新しいデータセットが古いものと比較して、わずかに多くの情報を含んでいることを示唆しています。

この一連の変更は、Goアプリケーションが常に最新かつ正確なタイムゾーン情報に基づいて動作することを保証し、世界中のユーザーにとって信頼性の高い時刻処理を提供するために不可欠です。

関連リンク

参考にした情報源リンク

[インデックス 16216] ファイルの概要

このコミットは、Go言語の標準ライブラリであるlib/timeパッケージにおけるタイムゾーンデータ(IANA Time Zone Database)を、2013cバージョンに更新するものです。これにより、最新のタイムゾーン規則がGoアプリケーションに適用され、特定のタイムゾーン関連のバグ(Issue 4553)が修正されます。

コミット

  • コミットハッシュ: 05e8db985aa1d8959d9ca1fedb148470fdcf0bb0
  • 作者: Rob Pike r@golang.org
  • コミット日時: 2013年4月22日 月曜日 16:28:42 -0700
  • コミットメッセージ:
    lib/time: update to IANA 2013c
    This should do it for the release.
    There was a new data set pushed out a couple of days ago.
    
    Fixes #4553.
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/8621044
    

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/05e8db985aa1d8959d9ca1fedb148470fdcf0bb0

元コミット内容

lib/time: update to IANA 2013c
This should do it for the release.
There was a new data set pushed out a couple of days ago.

Fixes #4553.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/8621044

変更の背景

このコミットの主な背景は、IANA Time Zone Databaseの新しいバージョンである2013cがリリースされたことにあります。タイムゾーンの規則は、各国の政府や国際機関の決定により頻繁に変更されるため、ソフトウェアが正確な時刻情報を提供するためには、これらの変更に追随してタイムゾーンデータを更新する必要があります。

コミットメッセージには「Fixes #4553」と明記されており、これはGoのIssueトラッカーにおける特定のバグを修正することを示しています。Issue #4553は、おそらく古いタイムゾーンデータに起因する、特定の地域や期間における時刻計算の不正確さに関する問題であったと推測されます。新しいIANAデータセットを取り込むことで、これらの既知の問題が解決され、Goのtimeパッケージがより正確な時刻情報を提供するようになります。

また、「This should do it for the release.」という記述から、この更新がGoの次期リリースに向けた重要な準備の一部であったことが伺えます。正確なタイムゾーン処理は、多くのアプリケーションにとって不可欠な機能であるため、リリース前に最新のデータに更新することは、安定性と信頼性を確保する上で非常に重要です。

前提知識の解説

IANA Time Zone Database (tzdata)

IANA Time Zone Database(以前はOlson databaseとして知られていました)は、世界のタイムゾーン情報、特に夏時間(DST)の開始・終了日やオフセット変更の履歴を網羅的に収集・管理している公開データベースです。このデータベースは、世界中のオペレーティングシステムやアプリケーションで、正確な時刻とタイムゾーン変換を提供するために広く利用されています。

タイムゾーンの規則は、政治的、地理的、歴史的な理由により頻繁に変更されます。例えば、ある国が夏時間を廃止したり、タイムゾーンの境界を変更したり、新しいタイムゾーンを導入したりすることがあります。IANA Time Zone Databaseは、これらの変更を追跡し、定期的に新しいバージョンをリリースしています。各バージョン(例: 2013c)は、特定の時点での最新のタイムゾーン規則を反映しています。

IANA 2013cのリリースでは、特に以下の変更が含まれていました。

  • パレスチナの夏時間 (DST): 2013年3月29日から夏時間を開始しました。
  • ガザおよびヘブロンのDST規則: 2013年以降、ガザとヘブロンはDSTを観測するようになり、その規則は3月の最終木曜日の24:00に開始し、9月21日以降の最初の金曜日の01:00に終了すると予測されました。
  • パラグアイのDST: パラグアイの夏時間に関する更新も含まれていました。

これらの変更は、タイムゾーンデータが常に変動していることを示しており、ソフトウェアが正確な時刻情報を提供するためには、このような更新を定期的に取り込む必要があることを強調しています。

zoneinfo.zip

Go言語のtimeパッケージは、システムにインストールされているタイムゾーンデータ(通常は/usr/share/zoneinfo以下に配置されるファイル群)を利用するか、またはGo自身の配布物に含まれるzoneinfo.zipというファイルからタイムゾーン情報を読み込みます。

zoneinfo.zipは、IANA Time Zone DatabaseのデータをGoが内部的に利用しやすい形式にまとめたものです。Goアプリケーションがクロスプラットフォームで動作し、かつシステムにタイムゾーンデータが適切に設定されていない環境でも正確な時刻処理を行えるようにするために、このファイルが提供されています。Goのビルドプロセスや、go getなどでパッケージを取得する際に、このzoneinfo.zipが適切に配置されるようになっています。

lib/time/update.bash

lib/time/update.bashは、Goのソースツリー内にあるシェルスクリプトで、IANA Time Zone Databaseの新しいバージョンがリリースされた際に、Goのtimeパッケージが使用するzoneinfo.zipファイルを更新するためのものです。このスクリプトは、IANAの公式ソースから最新のタイムゾーンデータをダウンロードし、それをGoが利用できるzoneinfo.zip形式に変換する処理を自動化します。

このスクリプトは、Goの開発者がタイムゾーンデータを手動で更新する手間を省き、更新プロセスの一貫性と正確性を保証するために存在します。

技術的詳細

Goのtimeパッケージは、time.LoadLocation関数などを用いてタイムゾーン情報をロードする際に、まずシステムが提供するタイムゾーンデータ(Unix系システムでは通常/usr/share/zoneinfo、Windowsではレジストリ)を探します。もしシステムデータが見つからない場合や、Goの内部的なメカニズムで利用する必要がある場合、Goは自身の配布物に含まれるzoneinfo.zipファイルからタイムゾーンデータを読み込みます。

このコミットは、zoneinfo.zipの元となるIANAデータが2013bから2013cに更新されたことを反映しています。具体的には、lib/time/update.bashスクリプト内のCODEDATAという変数の値が2013bから2013cに変更されています。これは、このスクリプトが次に実行される際に、IANAの2013cバージョンのタイムゾーンデータを取得し、それに基づいて新しいzoneinfo.zipを生成するように指示するものです。

zoneinfo.zipファイル自体はバイナリファイルであり、その内容が変更されたことがコミットの差分で示されています(Bin 374065 -> 374530 bytes)。これは、新しいタイムゾーンデータが取り込まれた結果、ファイルサイズがわずかに増加したことを意味します。このバイナリファイルの更新は、Goのtimeパッケージが内部的に参照するタイムゾーン規則が、最新のIANAデータに準拠するようになったことを直接的に示しています。

この更新により、Goアプリケーションは、2013cバージョンのIANAデータに含まれる最新の夏時間規則やタイムゾーンオフセットの変更を正確に処理できるようになります。例えば、パレスチナやパラグアイにおける夏時間の開始・終了日の変更など、特定の地域における最新のタイムゾーン規則がGoのtimeパッケージに反映されます。これにより、特に過去の特定の時点や未来のイベントに関する時刻計算において、より高い精度と信頼性が保証されます。

コアとなるコードの変更箇所

このコミットにおけるコアとなるコードの変更は、以下の2つのファイルに集中しています。

  1. lib/time/update.bash:

    --- a/lib/time/update.bash
    +++ b/lib/time/update.bash
    @@ -7,8 +7,8 @@
     # downloaded from the ICANN/IANA distribution.
    
     # Versions to use.
    -CODE=2013b
    -DATA=2013b
    +CODE=2013c
    +DATA=2013c
    
     set -e
     rm -rf work
    

    この変更では、CODEDATAという変数の値が2013bから2013cに更新されています。これらの変数は、update.bashスクリプトがIANA Time Zone Databaseのどのバージョンをダウンロードして処理するかを決定するために使用されます。

  2. lib/time/zoneinfo.zip:

    --- a/lib/time/zoneinfo.zip
    +++ b/lib/time/zoneinfo.zip
    index c10a42576e..e9ddfff818 100644
    Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ
    

    このファイルはバイナリファイルであるため、具体的な内容の差分は表示されていませんが、ファイルサイズが374065バイトから374530バイトに増加していることが示されています。これは、update.bashスクリプトの実行によって、新しいIANA 2013cデータに基づいてzoneinfo.zipが再生成され、その内容が更新されたことを意味します。

コアとなるコードの解説

lib/time/update.bashにおけるCODEDATA変数の変更は、Goのタイムゾーンデータ更新プロセスにおけるバージョン管理の核心です。CODEはタイムゾーンデータ処理に使用されるコードのバージョンを、DATAは実際に取り込むタイムゾーンデータのバージョンを指します。これらを2013cに更新することで、開発者はGoのビルドシステムに対して、最新のIANAデータセットを使用するように指示しています。

このスクリプトが実行されると、指定されたバージョンのIANAタイムゾーンデータがダウンロードされ、Goのtimeパッケージが内部的に利用できる形式(zoneinfo.zip)に変換されます。したがって、update.bashのバージョン番号を更新し、その結果としてzoneinfo.zipが変更されることは、Goが提供するタイムゾーン情報が最新の状態に保たれることを保証する直接的なメカニズムです。

zoneinfo.zipのバイナリ変更は、この更新プロセスの最終的な成果物です。このファイルには、世界中のタイムゾーンに関する詳細な規則(夏時間の開始・終了、UTCからのオフセットなど)が格納されており、Goのtimeパッケージがこれらの情報を利用して、正確な時刻変換や表示を行います。ファイルサイズの変化は、新しいデータセットが古いものと比較して、わずかに多くの情報を含んでいることを示唆しています。

この一連の変更は、Goアプリケーションが常に最新かつ正確なタイムゾーン情報に基づいて動作することを保証し、世界中のユーザーにとって信頼性の高い時刻処理を提供するために不可欠です。

関連リンク

参考にした情報源リンク

  • IANA Time Zone Database: https://www.iana.org/time-zones
  • Go Issue Tracker (GitHub): https://github.com/golang/go/issues
  • Go Code Review (Gerrit): https://go-review.googlesource.com/
  • Go time package documentation (GoDoc): https://pkg.go.dev/time (一般的なGoのtimeパッケージの動作に関する理解のため)
  • zoneinfo.zipに関するGoのソースコードや関連する議論 (Web検索を通じて得られた情報)
  • IANA Time Zone Databaseのリリースノートや変更履歴 (Web検索を通じて得られたIANA 2013cに関する情報)
  • Web search results for "IANA 2013c time zone changes" (Google Search)