自分の環境でも再現したため、いろいろと試してみました。
Gentoo:
- sys-libs/glibc-2.8_p20080602-r1
- sys-libs/timezone-data-2009c
Debian lenny:
- libc6 2.7-18
- tzdata 2008h-2
2009年1月1日午前08:59:60を表示してみようとすると、どちらの環境でも
$ TZ=right/Asia/Tokyo date -d@
Thu Jan 1 09:00:23 JST 2009
となりますが、タイムゾーンをUTCに変えると
$ TZ=right/UTC date -d@
Wed Dec 31 23:59:60 UTC 2008
となります。
他にもいろいろなタイムゾーンで試してみましたが、ヨーロッパや北米のタイムゾーンで
は特に問題がないようです。tzdata2009g.tar.gzのタイムゾーンの定義を見てみると、
夏時間を定義しているRule行のうち、今年以降も有効なものがあるタイムゾーンでは問題
がないようでした。
そこで、asiaファイルに以下のような2008年以降に有効な夏時間を定義してみると
$ mkdit tzdata2009g
$ cd tzdata2009g
$ wget ftp://elsie.nci.nih.gov/pub/tzdata2009g.tar.gz
$ tar zxf tzdata2009g.tar.gz
--- asia.orig 2009-04-21 05:18:01.000000000 +0900
+++ asia 2009-05-26 19:54:21.000000000 +0900
@@ -986,6 +986,8 @@
Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
+Rule Japan 2008 max - Apr Sun>=1 2:00 0 S
+Rule Japan 2008 max - Oct Sun>=1 2:00 1:00 D
# but the only locations using it (for birth certificates, presumably, since
# their audience is astrologers) were US military bases. For now, assume
# that for most purposes daylight-saving time was observed; otherwise, what
$ /usr/sbin/zic -d posix -y yearistype.sh asia
$ /usr/sbin/zic -d right -L leapseconds -y yearistype.sh asia
$ TZ=$(pwd)/right/Asia/Tokyo date -d@
Thu Jan 1 09:59:60 JDT 2009
$ TZ=$(pwd)/posix/Asia/Tokyo date -d@
Thu Jan 1 10:00:23 JDT 2009
となり、うるう秒が正しく効いています。ちなみにこれはAustralia/Sydneyからのコピペ
で、タイムゾーンの表記が「JDT」となっているのは変更の2行目の最後の列で「D」と表
記しているからです。
このとき、1999年1月1日午前08:59:60を表示してみようとすると
$ TZ=$(pwd)/right/Asia/Tokyo date -d@
Fri Jan 1 08:59:60 JST 1999
となり、やはりうるう秒が効いています。
どうやら、gmtimeまたはlocaltimeに渡す日時以降の年に夏時間のルールが存在しないタ
イムゾーンではうるう秒が効かないみたいです。
これはglibcのバグだと思いソースを見てみると、gmtimeもlocaltimeも結局は
time/tzfile.cの__tzfile_computeが処理をしているので、そのファイルの変更履歴を
glibcのgitレポジトリ <http://sources.redhat.com/git/?p=glibc.git> の
time/tzfile.cの2.6.1のタグがついている変更から順々に見ていったところ、
おそらくはこの変更 <http://tinyurl.com/ram3x6> でこの問題が起こったのはないかと
思います。
まだ、glibcのbugzillaに報告していませんが、後でしようかと思っています。ただ、
glibcの開発者に関する記事をDebianがeglibcに移行するという記事関連で目にしてちょ
っとしり込みしています。誰かかわりにやっていただけたら良いのですが。
--
Akinori Hattori <hattya@>