< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
In article <200811181512.mAIFC3YP006108 / ci.ruby-lang.org>,
matz / ruby-lang.org writes:
> matz 2008-11-19 00:12:02 +0900 (Wed, 19 Nov 2008)
>
> New Revision: 20251
>
> http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20251
>
> Log:
> * lib/time.rb: according to RFC2822, -0000 means local time, +0000
> means UTC. a patch from Chun Wang. [ruby-core:19578]
これはどうなんですかねぇ。
とりあえず、冬のロンドンで、以下のように
Time.rfc8222(time.rfc2822) で、UTC かどうかがラウンドトリッ
プしなくなります。
% TZ=Europe/London ./ruby -v -rtime -e 'p Time.rfc2822(Time.local(2008,12,1).rfc2822)'
ruby 1.9.0 (2008-11-19 revision 20285) [i686-linux]
2008-12-01 00:00:00 UTC
% TZ=Asia/Tokyo ./ruby -rtime -e 'p Time.rfc2822(Time.local(2008,12,1).rfc2822)'
2008-12-01 00:00:00 +0900
Time.local は地方時の Time オブジェクトを生成し、Time#rfc2822
で文字列化して、Time.rfc2822 で戻すと、ロンドンでは UTC になっ
てしまいます。東京では地方時のままになりますが。
変更前であれば、ちゃんとラウンドトリップします。
% TZ=Europe/London ruby -v -rtime -e 'p Time.rfc2822(Time.local(2008,12,1).rfc2822)'
ruby 1.9.0 (2008-10-02 revision 19663) [i686-linux]
2008-12-01 00:00:00 +0000
もとの指摘については、RFC 2822 の
minutes). The form "+0000" SHOULD be used to indicate a time zone at
Universal Time. Though "-0000" also indicates Universal Time, it is
used to indicate that the time was generated on a system that may be
in a local time zone other than Universal Time and therefore
indicates that the date-time contains no information about the local
time zone.
という記述が問題なんですが、a time zone at Universal Time と
いうのは冬のイギリスなどを意味していて、地方時を意味するので
はないだろうかと思っています。
そして、no information about the local time zone であること
を示すのは UTC を対応させるのがいいんじゃないかと考えていま
す。
なにか読み間違っていたり、変だったりしますかね?
パッチのように、-0000 を地方時にすると、冬のロンドンが
no information about the local time zone となりますが、こ
れは奇妙です。
まぁ、Time クラスにはしょせん utc/localtime の 2状態しかなく
て、RFC 2822 の形式には時差が 0 のものが +0000, -0000, GMT
と (少なくとも) 3種類ありますから、1対1 に写像できないのはしょ
うがなくて、ある程度いびつにならざるを得ないんですが、この中
で時差が 0 の地方時に対応するものを選ぶとしたら +0000 が適切
だと思います。
あと、パッチのようにひっくりかえすと、1.8 と 1.9 の間で RFC
2822 の形式で時刻をやりとりしたとときに UTC かどうかが反転す
るという問題もあります。本当に間違っているなら反転するのもや
むを得ないかもしれませんが、現在のところそうは思っていません。
--
[田中 哲][たなか あきら][Tanaka Akira]