[#38121] regex performace tuning and ABI compatibility — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

13 messages 2009/03/03

[#38191] big time — Tanaka Akira <akr@...>

思い立って、time_t を越える範囲を Time で扱うことに挑戦して

31 messages 2009/03/27
[#38194] Re: big time — Tadayoshi Funaba <tadf@...> 2009/03/28

> 思い立って、time_t を越える範囲を Time で扱うことに挑戦して

[#38196] Re: big time — Tanaka Akira <akr@...> 2009/03/28

In article <20090328.134401.209982445.tadf@dotrb.org>,

[#38202] Re: big time — Urabe Shyouhei <shyouhei@...> 2009/03/29

卜部です。

[#38205] Re: big time — Tanaka Akira <akr@...> 2009/03/29

In article <49CF6641.7010204@ruby-lang.org>,

[#38218] rinda/eval.rb — Masatoshi SEKI <m_seki@...>

咳といいます。

20 messages 2009/03/30
[#38219] Re: rinda/eval.rb — Tanaka Akira <akr@...> 2009/03/31

In article <F01982B3-FBB5-497F-BA36-38FA250E7D69@mva.biglobe.ne.jp>,

[#38223] Re: rinda/eval.rb — Masatoshi SEKI <m_seki@...> 2009/03/31

咳といいます。

[#38229] Re: rinda/eval.rb — "U.Nakamura" <usa@...> 2009/04/01

こんにちは、なかむら(う)です。

[#38233] Re: rinda/eval.rb — Tanaka Akira <akr@...> 2009/04/01

In article <20090401095853.B00A.C613B076@garbagecollect.jp>,

[#38222] *BSD で fork できない理由 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>

きしもとです

12 messages 2009/03/31

[ruby-dev:38206] Re: big time

From: "NARUSE, Yui" <naruse@...>
Date: 2009-03-29 17:32:11 UTC
List: ruby-dev #38206
成瀬です。

Tanaka Akira wrote:
> In article <49CDF29D.3010302@airemix.jp>,
>   "NARUSE, Yui" <naruse@airemix.jp> writes:
> 
>> これはDateTime#next_dayのようなものを追加するのはどうでしょう。
> 
> まぁ、考えなくもないのですが、いつもそれは
> 
> * 24時間後
> 
> * 次の日の同じ時刻
> 
> のどちらなのか、

とりあえず長いものの様子を見てみると、
PostgreSQLは24時間後 (24*60*60秒後) ですね。
なお、閏秒だと24時間後が同じ日になりうるんですが、
以下のように閏秒を次の日の00秒を2回という方法で実装していました。

まぁ、同じ日だったらもう1秒加えるのが正解な気がしますけど。

postgres=# SELECT ((timestamp '1972-06-30 23:59:59' AT TIME ZONE 'right/UTC' + INTERVAL '0 year 0 seconds') AT TIME ZONE 'right/UTC');
      timezone
---------------------
 1972-06-30 23:59:59
(1 row)

postgres=# SELECT ((timestamp '1972-06-30 23:59:59' AT TIME ZONE 'right/UTC' + INTERVAL '0 year 1 seconds') AT TIME ZONE 'right/UTC');
      timezone
---------------------
 1972-07-01 00:00:00
(1 row)

postgres=# SELECT ((timestamp '1972-06-30 23:59:59' AT TIME ZONE 'right/UTC' + INTERVAL '0 year 2 seconds') AT TIME ZONE 'right/UTC');
      timezone
---------------------
 1972-07-01 00:00:00
(1 row)


また、XML Schemaを見ると一応1日後になっているのですが、
http://www.w3.org/TR/xmlschema-2/#adding-durations-to-dateTimes
http://www.w3.org/TR/xmlschema11-2/#d0e29708
内部処理はUTC or local (というかタイムゾーン不定というべきか)でかつ、
閏秒は処理系依存(1.1では無視と規定)という仕様なので、
24時間後と変わりませんね。

なお、みんな大好きActiveSupportももちろん24*60*60秒後で、
閏秒には非対応に見えます。


ところで、ふと気づいたのですが、今のパッチだと
> Time.utc(-1,1,1,0,0,0)+60*60*24*(365+58)
=> 0-02-28 00:00:00 UTC
> Time.utc(-1,1,1,0,0,0)+60*60*24*(365+59)
=> 0-03-01 00:00:00 UTC
こうなるんですが、0年(=BC 1年)って閏年じゃないですかね。
原因は、必要以上に1900を加えている部分があるからのようです。

-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread