2010年7月14日

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

黒田です。
Akinori Hattori様、ありがとうございます。
ずいぶん昔の話で恐縮です・・・。

詳しい情報をいただきましたが、私のスキルではどうすることもできず、ただ見
守っておりましたが、本日 glibc を更新したところ、うるう秒を解釈するよう
になりましたのでご報告します。

更新前
- sys-libs/glibc-2.10.1-r1
$ TZ=right/Asia/Tokyo date -d@xxxxx
Thu Jan 1 09:00:23 JST 2009
$ TZ=right/Asia/Tokyo ruby -e 'p Time.mktime(1999,1,1,9)-1'
Fri Jan 01 08:59:59 +0900 1999

更新後
- sys-libs/glibc-2.11.2
$ TZ=right/Asia/Tokyo date -d@xxxxx
Thu Jan 1 08:59:60 JST 2009
$ TZ=right/Asia/Tokyo ruby -e 'p Time.mktime(1999,1,1,9)-1'
Fri Jan 01 08:59:60 +0900 1999

お世話になった方々、ありがとうございました。

黒田

On Tue, 26 May 2009 21:01:04 +0900
Akinori Hattori <hattya@xxxxx> wrote:

> 自分の環境でも再現したため、いろいろと試してみました。
>
> 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 : 2010年7月14日 12:43
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97043
トラックバック
コメント
コメントする




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