[インデックス 19259] ファイルの概要
このコミットは、Go言語の標準ライブラリである lib/time
パッケージにおけるタイムゾーン情報を、IANA (Internet Assigned Numbers Authority) のタイムゾーンデータベースのバージョン 2014b
に更新するものです。これにより、世界各地の最新のタイムゾーン規則(夏時間、UTCオフセットの変更など)がGoプログラムに正確に反映されるようになります。
コミット
commit bdff7f91d8e6b9a9cd4647f473be4a4b8808b5db
Author: Robert Hencke <robert.hencke@gmail.com>
Date: Tue Apr 29 21:41:54 2014 -0400
lib/time: update time zone info to v.2014b
Fixes #7412.
LGTM=r
R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/92850043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/bdff7f91d8e6b9a9cd4647f473be4a4b8808b5db
元コミット内容
lib/time/update.bash | 6 ++----\
lib/time/zoneinfo.zip | Bin 374754 -> 352541 bytes
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/time/update.bash b/lib/time/update.bash
index f24ef8204b..2680329da4 100755
--- a/lib/time/update.bash
+++ b/lib/time/update.bash
@@ -6,11 +6,9 @@
# This script rebuilds the time zone files using files
# downloaded from the ICANN/IANA distribution.
-# NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux.
-
# Versions to use.
-CODE=2013g
-DATA=2013g
+CODE=2014b
+DATA=2014b
set -e
rm -rf work
diff --git a/lib/time/zoneinfo.zip b/lib/time/zoneinfo.zip
index c9181153fa..65eaddde58 100644
Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ
変更の背景
タイムゾーンの規則は、世界中の政府や地域によって頻繁に変更されます。夏時間の開始・終了日、標準時のオフセット、さらには特定の地域のタイムゾーン自体が変更されることがあります。これらの変更は、正確な時刻計算やイベントのスケジューリングを行うソフトウェアにとって非常に重要です。
Go言語の time
パッケージは、これらのタイムゾーン情報を内部的に保持しており、正確な時刻処理を提供するために、IANAタイムゾーンデータベース(tzdataまたはzoneinfoとしても知られる)の最新バージョンに追随する必要があります。
このコミットは、Goが使用するタイムゾーンデータを、2014年3月25日にリリースされたIANAタイムゾーンデータベースのバージョン 2014b
に更新することを目的としています。2014b
リリースには、当時の最新のタイムキーピング規則が反映されており、Goアプリケーションがこれらの変更に適切に対応できるようにするために不可欠な更新でした。
前提知識の解説
IANAタイムゾーンデータベース (tzdata / zoneinfo)
IANAタイムゾーンデータベースは、世界のタイムゾーンと夏時間(DST)の規則に関する情報を集約した、協調的な公開ドメインプロジェクトです。このデータベースは、オペレーティングシステムやプログラミング言語など、多くのソフトウェアシステムで時刻と日付の計算を正確に行うために利用されています。
データベースは、各タイムゾーンの歴史的な変更を含む包括的なデータを提供します。これには、UTC(協定世界時)からのオフセット、夏時間の適用期間、および特定の地域が過去に採用したタイムゾーンの変更履歴が含まれます。このデータベースは定期的に更新され、世界中で発生するタイムゾーン規則の変更に対応しています。
Go言語におけるタイムゾーン処理
Go言語の time
パッケージは、タイムゾーン情報を扱うための機能を提供します。Goは、システムにインストールされているタイムゾーン情報(通常は /usr/share/zoneinfo
などに存在する)を利用するか、または zoneinfo.zip
のような組み込みのタイムゾーンデータファイルを使用することができます。
zoneinfo.zip
は、IANAタイムゾーンデータベースのコンパイル済みバイナリデータを含むZIPアーカイブです。Goの標準ライブラリは、このファイルを読み込むことで、システムにタイムゾーンデータが存在しない環境(例えば、一部の組み込みシステムやクロスコンパイルされたバイナリ)でも正確なタイムゾーン処理を可能にします。
lib/time/update.bash
スクリプト
lib/time/update.bash
は、Goの time
パッケージが使用する zoneinfo.zip
ファイルを更新するためのシェルスクリプトです。このスクリプトは、IANAの公式ソースから最新のタイムゾーンデータ(tzcode
と tzdata
)をダウンロードし、それらをコンパイルして zoneinfo.zip
を再構築するプロセスを自動化します。
このスクリプトは、Goのタイムゾーンデータが常に最新の状態に保たれるようにするための重要なツールであり、タイムゾーン規則の変更に対応するために定期的に実行されます。
技術的詳細
このコミットの技術的な変更は、主に2つのファイルに集中しています。
-
lib/time/update.bash
の変更: このシェルスクリプトは、IANAタイムゾーンデータベースのどのバージョンを使用するかを定義するCODE
とDATA
変数を保持しています。このコミットでは、これらの変数の値が2013g
から2014b
に更新されています。CODE=2013g
からCODE=2014b
へDATA=2013g
からDATA=2014b
へ これにより、update.bash
スクリプトが実行される際に、IANAのサーバーから2014b
バージョンのタイムゾーンコードとデータがダウンロードされ、Goのzoneinfo.zip
がこの新しいデータに基づいて再構築されるようになります。 また、コメントアウトされていたMacでのビルドに関する注意書きが削除されています。これは、当時のGoのビルドシステムや依存関係の改善により、この問題が解決されたことを示唆している可能性があります。
-
lib/time/zoneinfo.zip
のバイナリ変更:update.bash
スクリプトの実行結果として、zoneinfo.zip
ファイルの内容が更新されています。コミットの差分情報には「Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ」と表示されており、ファイルのサイズが374754
バイトから352541
バイトに減少していることが示されています。 このサイズ変更は、2014b
バージョンのタイムゾーンデータが2013g
バージョンと比較して、データの構造や内容に何らかの変更があったことを意味します。通常、タイムゾーンデータの更新は、新しい規則の追加や既存の規則の修正を伴うため、バイナリファイルのサイズが変わることは一般的です。
このコミットは、Goの time
パッケージが提供するタイムゾーン情報の正確性を維持するための定期的なメンテナンス作業の一環です。
コアとなるコードの変更箇所
--- a/lib/time/update.bash
+++ b/lib/time/update.bash
@@ -6,11 +6,9 @@
# This script rebuilds the time zone files using files
# downloaded from the ICANN/IANA distribution.
-# NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux.
-
# Versions to use.
-CODE=2013g
-DATA=2013g
+CODE=2014b
+DATA=2014b
set -e
rm -rf work
lib/time/zoneinfo.zip
はバイナリファイルであるため、具体的なコードの差分は表示されませんが、その内容が更新されたことが示されています。
コアとなるコードの解説
update.bash
スクリプト内の CODE
と DATA
変数の変更は、Goがタイムゾーンデータを取得する際の「参照バージョン」を直接的に変更します。これにより、スクリプトが実行されるたびに、IANAタイムゾーンデータベースの 2014b
バージョンがフェッチされ、Goの内部で使用される zoneinfo.zip
がこの最新データに基づいて再生成されます。
zoneinfo.zip
のバイナリ更新は、このスクリプトの実行結果であり、Goの time
パッケージが実際に使用するタイムゾーンデータが新しいバージョンに置き換えられたことを意味します。これにより、Goアプリケーションは、2014b
で導入された最新のタイムゾーン規則(例えば、特定の国の夏時間規則の変更や、新しいタイムゾーンの追加など)を正確に解釈し、適用できるようになります。
この変更は、Goアプリケーションが世界中のユーザーに対して正確な時刻表示と計算を提供するために不可欠です。古いタイムゾーンデータを使用し続けると、特に夏時間の切り替わり時や、タイムゾーン規則が最近変更された地域において、時刻のずれや誤った表示が発生する可能性があります。
関連リンク
- Go Issue #7412: https://github.com/golang/go/issues/7412
- Go CL 92850043: https://golang.org/cl/92850043 (これはコミットメッセージに記載されているGo Code Reviewのリンクです)
参考にした情報源リンク
- IANA Time Zone Database: https://www.iana.org/time-zones
- Wikipedia - Tz database: https://en.wikipedia.org/wiki/Tz_database
- Web search results for "IANA time zone database 2014b changes" (used for background information on 2014b release date and purpose).
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHbLpf1mgDXrXGpthzYIWZgl4Y1M8x38TZB4Pa5diifR9iiEEbYoA1aj4zKMirodrHPHQDpe-rF2yIsrPdsO_3RXH7n9woylPQP2Rz7VUkRfU9gygyWg739CaRBl9EeXgtq0pOqA7kNM2DwZ2K59bN1t38KvcfvG-dVuB8ndlA=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGHy0Fm7BuiHrbhMerzyEl-XJttmPsxR9e2bWpRCTmIkxgJ5pSYNW-1aMxX-dFDjgXrS_0iBwgwLOhTNVo4xvSDQObWwgr6buc4sGLRb6aK9ZRFFBdpsNFnWnWGr7iGaeTnuTXu1MQbObJXxzHixw==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHiLwwMlMNKcdAJ4Eh2OnfUZ73iKaS0u9SbBWOCa_dxnpl8L86SW7NUWia-bFZouDPwYtWOIJf8bEebLoqQyd7kXF_-zE8nnRewldM5rMY5KbRc6x0iygpoV-XdinlkmhGCLQKuwpHfWn18C85_XPk9wEFDAIcNlGg=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHYyqh7vTqtGL1L_4gh6K5u9quA8ACIy5wIe5cqWANoG01cjT9rgwYGSG9wHSkT_QnuB4l0MPHI0XgWhgO6CAOrNAuV96kB81_6NyhQ9z3QRzfGZK_P6ESfLFk=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEFGgLsqZ52d1f2BS5cvrRuZ3r6xYMm0FLop1qYbpD22TMtWoUMBjGGSMBqen01l_ZHgjRMbQrerScsmtVJ0KNK1c81yiuDJVwORkLhnpQRc76sZLdyxKbC37V0atwHnxNhxkAm