Date/DateTimeの仕様について

$B$U$J$P$5$s(B
$B@.@%$G$9!#(B

RubySpec
$B$rD/$a$F$$$F$$$/$D$+5$$E$$$?$3$H$,$"$k$N$G<ALd$5$;$F$/$@$5$$!#(B

$B$^$:!"(BDateTime.new $B$NBh(B3~6$B0z?t$KC<?t$rM?$($?>l9g$G$9$,!"(B
irb(main):002:0> DateTime.new(4172,1,1,Rational(1,2))
=> #<DateTime: 4172-01-01T00:30:00+00:00
((3244852j,1800s,0n),+0s,2299161j)>
irb(main):003:0> DateTime.new(4172,1,1,Rational(1,2),0)
ArgumentError: invalid fraction
irb(main):004:0> DateTime.new(4172,1,1,1.5)
=> #<DateTime: 4172-01-01T01:30:00+00:00
((3244852j,5400s,0n),+0s,2299161j)>
irb(main):005:0> DateTime.new(4172,1,1,1.5,0)
ArgumentError: invalid fraction
$B0J>e$O(B 1.9.2 $B$G$OA4$FDL$k$N$G$9$,!";EMMJQ99$G$7$g$&$+!#(B
$B0J2<$N%Q%C%A$rEv$F$k$H0JA0$N5sF0$KLa$k$h$&$G$9$,!#(B
diff --git a/ext/date/date_core.c b/ext/date/date_core.c
index cd2bc68…0ae553b 100644
— a/ext/date/date_core.c
+++ b/ext/date/date_core.c
@@ -3071,8 +3071,6 @@ s_trunc(VALUE s, VALUE *fr)
{
s = s##_trunc(v##s, &fr);
if (f_nonzero_p(fr)) {\

  •   if (argc > n)\
    
  •       rb_raise(rb_eArgError, "invalid fraction");\
      fr2 = fr;\
    
    }
    }
    @@ -3081,8 +3079,6 @@ s_trunc(VALUE s, VALUE *fr)
    {
    s = NUM2INT(s##_trunc(v##s, &fr));
    if (f_nonzero_p(fr)) {\
  •   if (argc > n)\
    
  •       rb_raise(rb_eArgError, "invalid fraction");\
      fr2 = fr;\
    
    }
    }

$B<!$K!"(BDateTime.new$B$NBh(B4$B0z?t$K(B24$B$rM?$($?>l9g$K$D$$$F!"(B
irb(main):002:0> DateTime.new(4172,1,1,23)
=> #<DateTime: 4172-01-01T23:00:00+00:00
((3244852j,82800s,0n),+0s,2299161j)
irb(main):003:0> DateTime.new(4172,1,1,24)
=> #<DateTime: 4172-01-01T23:00:00+00:00
((3244853j,0s,0n),+0s,2299161j)>
irb(main):002:0> DateTime.new(4172,1,1,24).hour
=> 24
irb(main):003:0> DateTime.new(4172,1,1,24).day
=> 1
irb(main):004:0> DateTime.new(4172,1,2)
=> #<DateTime: 4172-01-02T00:00:00+00:00
((3244853j,0s,0n),+0s,2299161j)>
$B0JA0$+$i0z?t$H$7$F(Bhour=24$B$N$5v$5$l$F$$$k$s$G$9$,!J1<ICBP:v(B?$B!K!"(B
$B8=:
$O7+$j>e$,$i$J$$$h$&$K$J$C$F$$$^$9!#(B
$B$3$l<+BN$O;EMMJQ99$J$i$P$=$l$G$$$$$N$G$9$,!"(B
$B$@$H$7$F$b(B inspect $B7k2L$,$*$+$7$$$h$&$K8+$($^$9!#(B

$B$J$!"(B1.9.2 $B$@$H0J2<$N$H$$jN>J}$H$bMbF|(B0$B;~$K$J$j$^$9!#(B
irb(main):002:0> DateTime.new(4172,1,1,24)
=> #<DateTime: 4172-01-02T00:00:00+00:00 (6489705/2,0,2299161)>
irb(main):003:0> DateTime.new(4172,1,2,0)
=> #<DateTime: 4172-01-02T00:00:00+00:00 (6489705/2,0,2299161)>
irb(main):002:0> DateTime.new(4172,1,1,24).hour
=> 0
irb(main):003:0> DateTime.new(4172,1,1,24).day
=> 2

$B$^$:!"(BDateTime.new $B$NBh(B3~6$B0z?t$KC<?t$rM?$($?>l9g$G$9$,!"(B
($BCfN,(B)
$B0J>e$O(B 1.9.2 $B$G$OA4$FDL$k$N$G$9$,!";EMMJQ99$G$7$g$&$+!#(B
$B0J2<$N%Q%C%A$rEv$F$k$H0JA0$N5sF0$KLa$k$h$&$G$9$,!#(B

$B$=$&$$$&5sF0$r;EMM$H$7$F@5<0$KG’$a$?$H$$$&$3$H$O$J$$$G$9$M!#(B

$B$"$k$H$-!"@0?t$G$J$$0z?t$rEO$7$F$A$c$s$HF0$+$J$$$H$$$&J86g$r8@$o$l$?$H(B
$B$-$K!"%3!<%I$N7rA4@-$N0Y$HIC$KC<?t$,4^$^$l$kDxEY$N32$N$J$$$D$+$$$+$?$O(B
$BG’$a$F$b$$$$$@$m$&$H;W$C$F!"%P%0$G$O$J$$$,!"$=$&$$$&$N$r<YKb$7$J$$$h$&(B
$B$K=$@5$O$7$?$N$G$9$,!“L5@)8B$KMtMQ$rG’$a$F$$$k$o$1$G$O$J$$$G$9!#:#$N5s(B
$BF0$O!“MtMQ$K$J$i$J$$$h$&$K@0M}$7$F@5<0$K;EMM$K$7$?$H$$$&$3$H$@$H;W$C$F(B
$B$$$^$9!#$b$H$b$H$O!”(Bhome_run
$B$G$O@0?t$7$?<u$1$H$i$:!”$=$l$KC/$bJ86g$r8@(B
$B$o$J$+$C$?$N$G!"$3$C$A$b$=$&$7$h$&$+$H;W$C$F$$$^$7$?$,!"%.%j%.%j$G>/$7(B
$B4KOB$7$?$^$7$?!#(B

$B$3$N%Q%C%A$O(B Philip R.
$B$N$HF1$8$G$^$C$?$/0UL#$,$J$$$H;W$$$^$9!#(B

$B<!$K!"(BDateTime.new$B$NBh(B4$B0z?t$K(B24$B$rM?$($?>l9g$K$D$$$F!"(B

$B$3$C$A$O0U?^$H0c$&$N$G=$@5$7$^$9!#(B

$B$U$J$P$5$s(B

$B$3$N%Q%C%A$O(B Philip R. $B$N$HF1$8$G$^$C$?$/0UL#$,$J$$$H;W$$$^$9!#(B

$B$^$"!"$3$N%Q%C%A$O!“4XO”$9$k%3!<%I$N0LCV$r<($7$F$$$k$@$1$G!"(B
$B$=$&$9$Y$-$@$H$$$&;v$r8@$C$F$$$k$o$1$G$O$J$$$H;W$$$^$9$,!"(B

DateTime.new(4172,1,1,1.5)
$B$H(B
DateTime.new(4172,1,1,1.5,0)
$B$OF1MM$K2r<a$9$k$1$I!"(B
DateTime.new(4172,1,1,1.5,1)
$B$J$I$O%(%i!<$K$9$k$H$$$&%Q%C%A$@$H<u$1F~$l$i$l$k2DG=@-$O$"$j$^$9$+(B?

Tomoaki NISHIYAMA

Advanced Science Research Center,
Kanazawa University,
13-1 Takara-machi,
Kanazawa, 920-0934, Japan

(2011/06/21 20:23), Tadayoshi F. wrote:

$B$K=$@5$O$7$?$N$G$9$,!“L5@)8B$KMtMQ$rG’$a$F$$$k$o$1$G$O$J$$$G$9!#:#$N5s(B
$BF0$O!“MtMQ$K$J$i$J$$$h$&$K@0M}$7$F@5<0$K;EMM$K$7$?$H$$$&$3$H$@$H;W$C$F(B
$B$$$^$9!#$b$H$b$H$O!”(Bhome_run $B$G$O@0?t$7$?<u$1$H$i$:!”$=$l$KC/$bJ86g$r8@(B
$B$o$J$+$C$?$N$G!"$3$C$A$b$=$&$7$h$&$+$H;W$C$F$$$^$7$?$,!"%.%j%.%j$G>/$7(B
$B4KOB$7$?$^$7$?!#(B

$B$3$N%Q%C%A$O(B Philip R. $B$N$HF1$8$G$^$C$?$/0UL#$,$J$$$H;W$$$^$9!#(B

$B$=$N$h$&$JJ}?K$G$"$l$P7k9=$G$9!#(B
$B%Q%C%A$O$9$0$K:n$l$?$+$i;29M$^$G$KE:IU$7$?0J>e$N0UL#$O$J$$$N$G!#(B
$B$3$A$i$O(B RubySpec $BB&$r=$@5$7$^$7$?!#(B

$B<!$K!"(BDateTime.new$B$NBh(B4$B0z?t$K(B24$B$rM?$($?>l9g$K$D$$$F!"(B

$B$3$C$A$O0U?^$H0c$&$N$G=$@5$7$^$9!#(B

$B$o$+$j$^$7$?!“BP1~$”$j$,$H$&$4$6$$$^$9!#(B

DateTime.new(4172,1,1,1.5)
$B$H(B
DateTime.new(4172,1,1,1.5,0)
$B$OF1MM$K2r<a$9$k$1$I!"(B
DateTime.new(4172,1,1,1.5,1)
$B$J$I$O%(%i!<$K$9$k$H$$$&%Q%C%A$@$H<u$1F~$l$i$l$k2DG=@-$O$"$j$^$9$+(B?

$B$J$$$G$7$g$&!#$b$&!";EMM$OE`7k$5$l$^$7$?$7!#(B