2009年5月26日

[gentoojp-users:02133] Re: うるう秒

自分の環境でも再現したため、いろいろと試してみました。

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@xxxxx
Thu Jan 1 09:00:23 JST 2009

となりますが、タイムゾーンをUTCに変えると

$ TZ=right/UTC date -d@xxxxx
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@xxxxx
Thu Jan 1 09:59:60 JDT 2009
$ TZ=$(pwd)/posix/Asia/Tokyo date -d@xxxxx
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@xxxxx
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@xxxxx>


投稿者 xml-rpc : 2009年5月26日 21:01
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/85355
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。