# \[Bug:trunk\] behavior change of some methods of Date between 1.8 and 1.9

**URL:** <https://www.ruby-forum.com/t/bug-trunk-behavior-change-of-some-methods-of-date-between-1-8-and-1-9/182462>\
**Category:** Development\
**Created:** [January 28, 2010, 2:24pm UTC](https://www.ruby-forum.com/t/bug-trunk-behavior-change-of-some-methods-of-date-between-1-8-and-1-9/182462 "2010-01-28T14:24:06Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [January 28, 2010, 2:24pm UTC](https://www.ruby-forum.com/t/bug-trunk-behavior-change-of-some-methods-of-date-between-1-8-and-1-9/182462/1 "2010-01-28T14:24:06Z")

</div>

e$B$U$J$P$5$se(B  
e$B1sF#$G$9!#e(B

rubyspec e$B$,e(B Date  
e$B$K4X$9$kF0:n$N0c$$$r8+$D$1$^$/$C$F$/$l$k$s$G$9$,!"e(B  
Date e$B$NCN\<1$,$J$/$F%P%0$+$I$&$+H=CG$G$-$^$;$s!#e(B  
e$B$9$\_$^$;$s$,0J2\<$NF0:n$N0c$$$r%A%'%C%/$7$F$$$?$@$1$^$9$G$7$g$&$+!#e(B

ruby18 e$B$O$9$Y$Fe(B ruby 1.8.8dev (2010-01-26 revision 26430)  
[i686-linux] e$B$G!"e(B  
ruby19 e$B$O$9$Y$Fe(B ruby 1.9.2dev (2010-01-28 trunk 26458)  
[i686-linux] e$B$G$9!#e(B  
ruby-1.9.1-p378

1. Date.valid\_commercial? e$B$NJV$9CM$N??56$,JQ$o$C$?!)e(B  
$ ruby18 -rdate -e ‘p Date.valid\_commercial?(1582, 41, 4)’  
nil

$ ruby19 -rdate -e ‘p Date.valid\_commercial?(1582, 41, 4)’  
true

1. Date.ordinal e$B$NHO0O$,JQ$o$C$?!)e(B  
$ ruby18 -rdate -e ‘p Date.ordinal(1582, 287).day’  
/home/mame/work/ruby18/local/lib/ruby/1.8/date.rb:732:in `ordinal’:  
invalid date (ArgumentError)  
from -e:1

$ ruby19 -rdate -e ‘p Date.ordinal(1582, 287).day’  
24

1. Date.ordinal e$B$NHO0O$,JQ$o$C$?!)e(B (e$B$=$Ne(B 2)  
$ ruby18 -rdate -e ‘p Date.ordinal(1582, 288).day’  
15  
$ ruby19 -rdate -e ‘p Date.ordinal(1582, 288).day’  
25

2. Date.valid\_ordinal? e$B$NHO0O$,JQ$o$C$?!)e(B (e$B$=$Ne(B 3)  
$ ruby18 -rdate -e ‘p Date.valid\_ordinal?(1582, 287)’  
nil

$ ruby19 -rdate -e ‘p Date.valid\_ordinal?(1582, 287)’  
true

[http://github.com/rubyspec/rubyspec/blob/master/library/date/commercial\_spec.rb](http://github.com/rubyspec/rubyspec/blob/master/library/date/commercial_spec.rb)  
[http://github.com/rubyspec/rubyspec/blob/master/library/date/ordinal\_spec.rb](http://github.com/rubyspec/rubyspec/blob/master/library/date/ordinal_spec.rb)

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [January 28, 2010, 2:51pm UTC](https://www.ruby-forum.com/t/bug-trunk-behavior-change-of-some-methods-of-date-between-1-8-and-1-9/182462/2 "2010-01-28T14:51:37Z")

</div>

> 1. Date.valid\_commercial? e$B$NJV$9CM$N??56$,JQ$o$C$?!)e(B  
> $ ruby18 -rdate -e ‘p Date.valid\_commercial?(1582, 41, 4)’  
> nil
> 
> $ ruby19 -rdate -e ‘p Date.valid\_commercial?(1582, 41, 4)’  
> true

e$B$O$$!#e(B

> 1. Date.ordinal e$B$NHO0O$,JQ$o$C$?!)e(B  
> $ ruby18 -rdate -e ‘p Date.ordinal(1582, 287).day’  
> /home/mame/work/ruby18/local/lib/ruby/1.8/date.rb:732:in `ordinal’:  
> invalid date (ArgumentError)  
> from -e:1
> 
> $ ruby19 -rdate -e ‘p Date.ordinal(1582, 287).day’  
> 24

e$B$O$$!#A0$N%a!\<%k$G=q$$$?$N$HF1$8$3$H$G$9!#e(B

$ ./ruby -I lib sample/cal.rb -c it -j 10 1582 # 1.8  
October 1582  
S M Tu W Th F S  
274 275 276 277 288 289  
290 291 292 293 294 295 296  
297 298 299 300 301 302 303  
304

$ ./ruby -I lib sample/cal.rb -c it -j 10 1582 # 1.9  
October 1582  
S M Tu W Th F S  
274 275 276 277 278 279  
280 281 282 283 284 285 286  
287 288 289 290 291 292 293  
294

> 1. Date.ordinal e$B$NHO0O$,JQ$o$C$?!)e(B (e$B$=$Ne(B 2)  
> $ ruby18 -rdate -e ‘p Date.ordinal(1582, 288).day’  
> 15  
> $ ruby19 -rdate -e ‘p Date.ordinal(1582, 288).day’  
> 25

e$B$O$$!#e(B

$ ./ruby -I lib sample/cal.rb -c it 10 1582 # 1.8  
October 1582  
S M Tu W Th F S  
1 2 3 4 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31

$ ./ruby -I lib sample/cal.rb -c it 10 1582 # 1.9  
October 1582  
S M Tu W Th F S  
1 2 3 4 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31

> 1. Date.valid\_ordinal? e$B$NHO0O$,JQ$o$C$?!)e(B (e$B$=$Ne(B 3)  
> $ ruby18 -rdate -e ‘p Date.valid\_ordinal?(1582, 287)’  
> nil
> 
> $ ruby19 -rdate -e ‘p Date.valid\_ordinal?(1582, 287)’  
> true

e$B$O$$!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [January 28, 2010, 4:23pm UTC](https://www.ruby-forum.com/t/bug-trunk-behavior-change-of-some-methods-of-date-between-1-8-and-1-9/182462/3 "2010-01-28T16:23:31Z")

</div>

e$B%A%1%C%He(B #2676 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)

e$B%9%F!\<%?%9e(B Opene$B$+$ie(BRejectede$B$KJQ99e(B  
ruby -v ruby 1.9.2dev (2010-01-28 trunk 26458)  
[i686-linux]e$B$K%;%C%He(B

e$B1sF#$G$9!#e(B

e$B$\*JV;v$"$j$,$H$&$4$6$$$^$9!#e(B

2010e$BG/e(B1e$B7ne(B28e$BF|e(B22:50 Tadayoshi F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > 1. Date.valid\_commercial? e$B$NJV$9CM$N??56$,JQ$o$C$?!)e(B  
> > $ ruby18 -rdate -e ‘p Date.valid\_commercial?(1582, 41, 4)’  
> > nil
> > 
> > $ ruby19 -rdate -e ‘p Date.valid\_commercial?(1582, 41, 4)’  
> > true
> 
> e$B$O$$!#e(B

e$B$o$+$j$^$7$?!#e(B  
e$B3NG’$G$9$,!"e(B1.8 e$B$@$He(B 1582-10-04 e$B0JA0$Ne(B commercial date  
e$B$O07$($J$$e(B  
(1581 e$BG/0JA0$b4^$a$Fe(B) e$B$H$$$&$3$H$G$$$$$G$7$g$&$+!#e(B

> > 1. Date.ordinal e$B$NHO0O$,JQ$o$C$?!)e(B  
> > $ ruby18 -rdate -e ‘p Date.ordinal(1582, 287).day’  
> > /home/mame/work/ruby18/local/lib/ruby/1.8/date.rb:732:in `ordinal’:  
> > invalid date (ArgumentError)  
> > from -e:1
> > 
> > $ ruby19 -rdate -e ‘p Date.ordinal(1582, 287).day’  
> > 24
> 
> e$B$O$$!#A0$N%a!\<%k$G=q$$$?$N$HF1$8$3$H$G$9!#e(B

e$BB\>$b$o$+$C$?$H;W$$$^$9!#$"$j$,$H$&$4$6$$$^$9!#e(B

e$B$o$+$C$?$H$$$$$D$D=q$/$N$K6lO+$7$?%Q%C%Ae(B:

diff --git a/library/date/commercial\_spec.rb  
b/library/date/commercial\_spec.rb  
index c960ed7…9367470 100644  
— a/library/date/commercial\_spec.rb  
+++ b/library/date/commercial\_spec.rb  
@@ -10,20 +10,65 @@ end

describe “Date#valid\_commercial?” do

- it “should be able to determine if the date is a valid commercial  
date” do
- Date.valid\_commercial?(1582, 41, 4).should == nil
- Date.valid\_commercial?(1582, 41, 5).should == Date.civil(1582, 10,  
15).jd
- 
# valid\_commercial? can’t handle dates before the Gregorian

calendar

- Date.valid\_commercial?(1582, 41, 4, Date::ENGLAND).should == nil
- Date.valid\_commercial?(1752, 37, 4, Date::ENGLAND).should ==  
Date.civil(1752, 9, 14, Date::ENGLAND).jd

- ruby\_version\_is “” … “1.9” do
- it “should be able to determine if the date is a valid commercial  
date” do
- 

```
 # October 1582

```

- 

```
 # M Tu W Th F Sa Su

```

- 

```
 # 41: - - - - 5 6 7

```

- 

```
 # 42: 1 2 3 4 5 6 7

```

- 

```
 # 43: 1 2 3 4 5 6 7

```

- 

```
 # 44: 1

```

- 

```
 Date.valid_commercial?(1582, 41, 4).should == nil

```

- 

```
 Date.valid_commercial?(1582, 41, 5).should == Date.civil(1582, 

```

10, 15).jd

- 

```
 # valid_commercial? can't handle dates before the Gregorian 

```

calendar

- 

```
 Date.valid_commercial?(1582, 41, 4, Date::ENGLAND).should == nil

```

- 

```
 Date.valid_commercial?(1752, 37, 4, Date::ENGLAND).should == 

```

Date.civil(1752, 9, 14, Date::ENGLAND).jd

- end
- 
- it “should be able to handle negative week and day numbers” do
- 

```
 # October 1582

```

- 

```
 # M Tu W Th F Sa Su

```

- 

```
 # -12: - - - - -3 -2 -1

```

- 

```
 # -11: -7 -6 -5 -4 -3 -2 -1

```

- 

```
 # -10: -7 -6 -5 -4 -3 -2 -1

```

- 

```
 # -9: -7

```

- 

```
 Date.valid_commercial?(1582, -12, -4).should == nil

```

- 

```
 Date.valid_commercial?(1582, -12, -3).should == Date.civil(1582, 

```

10, 15).jd  
+

- 

```
 Date.valid_commercial?(2007, -44, -2).should == Date.civil(2007, 

```

3, 3).jd

- 

```
 Date.valid_commercial?(2008, -44, -2).should == Date.civil(2008, 

```

3, 1).jd

- end  
end

- it “should be able to handle negative week and day numbers” do
- Date.valid\_commercial?(1582, -12, -4).should == nil
- Date.valid\_commercial?(1582, -12, -3).should == Date.civil(1582,  
10, 15).jd
- 
- Date.valid\_commercial?(2007, -44, -2).should == Date.civil(2007, 3,  
3).jd
- Date.valid\_commercial?(2008, -44, -2).should == Date.civil(2008, 3,  
1).jd

- ruby\_version\_is “1.9” do
- it “should be able to determine if the date is a valid commercial  
date” do
- 

```
 # October 1582

```

- 

```
 # M Tu W Th F Sa Su

```

- 

```
 # 39 1 2 3 4 5 6 7

```

- 

```
 # 40: 1 2 3 4 5 6 7

```

- 

```
 # 41: 1 2 3 4 5 6 7

```

- 

```
 # 42: 1

```

- 

```
 Date.valid_commercial?(1582, 39, 4).should == true

```

- 

```
 Date.valid_commercial?(1582, 39, 5).should == true

```

- 

```
 Date.valid_commercial?(1582, 41, 4).should == true

```

- 

```
 Date.valid_commercial?(1582, 41, 5).should == true

```

- 

```
 Date.valid_commercial?(1582, 41, 4, Date::ENGLAND).should == true

```

- 

```
 Date.valid_commercial?(1752, 37, 4, Date::ENGLAND).should == true

```

- end
- 
- it “should be able to handle negative week and day numbers” do
- 

```
 # October 1582

```

- 

```
 # M Tu W Th F Sa Su

```

- 

```
 # -12: -7 -6 -5 -4 -3 -2 -1

```

- 

```
 # -11: -7 -6 -5 -4 -3 -2 -1

```

- 

```
 # -10: -7 -6 -5 -4 -3 -2 -1

```

- 

```
 # -9: -7

```

- 

```
 Date.valid_commercial?(1582, -12, -4).should == true

```

- 

```
 Date.valid_commercial?(1582, -12, -3).should == true

```

- 
- 

```
 Date.valid_commercial?(2007, -44, -2).should == true

```

- 

```
 Date.valid_commercial?(2008, -44, -2).should == true

```

- end  
end

end  
diff --git a/library/date/ordinal\_spec.rb b/library/date/ordinal\_spec.rb  
index 2169d8b…46cefc7 100644  
— a/library/date/ordinal\_spec.rb  
+++ b/library/date/ordinal\_spec.rb  
@@ -4,26 +4,98 @@ require File.dirname( **FILE** ) + ‘/shared/commercial’

describe “Date#ordinal” do

- it “should be able to construct a Date object from an ordinal date”  
do
- lambda { Date.ordinal(1582, 287) }.should  
raise\_error(ArgumentError)
- Date.ordinal(1582, 288).should == Date.civil(1582, 10, 15)
- Date.ordinal(1582, 287, Date::ENGLAND).should == Date.civil(1582,  
10, 14, Date::ENGLAND)

- ruby\_version\_is “” … “1.9” do
- it “should be able to construct a Date object from an ordinal date”  
do
- 

```
 # October 1582

```

- 

```
 # S M Tu W Th F S

```

- 

```
 # 274 275 276 277 288 289

```

- 

```
 # 290 291 292 293 294 295 296

```

- 

```
 # 297 298 299 300 301 302 303

```

- 

```
 # 304

```

- 

```
 Date.ordinal(1582, 274).should == Date.civil(1582, 10, 1)

```

- 

```
 Date.ordinal(1582, 277).should == Date.civil(1582, 10, 4)

```

- 

```
 lambda { Date.ordinal(1582, 278) }.should 

```

raise\_error(ArgumentError)

- 

```
 lambda { Date.ordinal(1582, 287) }.should 

```

raise\_error(ArgumentError)

- 

```
 Date.ordinal(1582, 288).should == Date.civil(1582, 10, 15)

```

- 

```
 Date.ordinal(1582, 287, Date::ENGLAND).should == Date.civil(1582, 

```

10, 14, Date::ENGLAND)

- end
- end
- 
- ruby\_version\_is “1.9” do
- it “should be able to construct a Date object from an ordinal date”  
do
- 

```
 # October 1582

```

- 

```
 # S M Tu W Th F S

```

- 

```
 # 274 275 276 277 278 279

```

- 

```
 # 280 281 282 283 284 285 286

```

- 

```
 # 287 288 289 290 291 292 293

```

- 

```
 # 294

```

- 

```
 Date.ordinal(1582, 274).should == Date.civil(1582, 10, 1)

```

- 

```
 Date.ordinal(1582, 277).should == Date.civil(1582, 10, 4)

```

- 

```
 Date.ordinal(1582, 278).should == Date.civil(1582, 10, 15)

```

- 

```
 Date.ordinal(1582, 287, Date::ENGLAND).should == Date.civil(1582, 

```

10, 14, Date::ENGLAND)

- end  
end

end

describe “Date#valid\_ordinal?” do

- it “should be able to determine if the date is a valid ordinal date”  
do
- Date.valid\_ordinal?(1582, 287).should == nil
- Date.valid\_ordinal?(1582, 288).should == Date.civil(1582, 10,  
15).jd
- Date.valid\_ordinal?(1582, 287, Date::ENGLAND).should\_not == nil
- Date.valid\_ordinal?(1582, 287, Date::ENGLAND).should ==  
Date.civil(1582, 10, 14, Date::ENGLAND).jd

- ruby\_version\_is “” … “1.9” do
- it “should be able to determine if the date is a valid ordinal  
date” do
- 

```
 # October 1582

```

- 

```
 # S M Tu W Th F S

```

- 

```
 # 274 275 276 277 278 279

```

- 

```
 # 280 281 282 283 284 285 286

```

- 

```
 # 287 288 289 290 291 292 293

```

- 

```
 # 294

```

- 

```
 Date.valid_ordinal?(1582, 277).should == Date.civil(1582, 10, 

```

4).jd

- 

```
 Date.valid_ordinal?(1582, 278).should == nil

```

- 

```
 Date.valid_ordinal?(1582, 287).should == nil

```

- 

```
 Date.valid_ordinal?(1582, 288).should == Date.civil(1582, 10, 

```

15).jd

- 

```
 Date.valid_ordinal?(1582, 287, Date::ENGLAND).should_not == nil

```

- 

```
 Date.valid_ordinal?(1582, 287, Date::ENGLAND).should == 

```

Date.civil(1582, 10, 14, Date::ENGLAND).jd

- end
- 
- it “should be able to handle negative day numbers” do
- 

```
 # October 1582

```

- 

```
 # S M Tu W Th F S

```

- 

```
 # -92 -91 -90 -89 -78 -77

```

- 

```
 # -76 -75 -74 -73 -72 -71 -70

```

- 

```
 # -69 -68 -67 -66 -65 -64 -63

```

- 

```
 # -62

```

- 

```
 Date.valid_ordinal?(1582, -89).should == Date.civil(1582, 10, 

```

4).jd

- 

```
 Date.valid_ordinal?(1582, -88).should == nil

```

- 

```
 Date.valid_ordinal?(1582, -79).should == nil

```

- 

```
 Date.valid_ordinal?(1582, -78).should == Date.civil(1582, 10, 

```

15).jd

- 

```
 Date.valid_ordinal?(2007, -100).should == 

```

Date.valid\_ordinal?(2007, 266)

- end  
end

- it “should be able to handle negative day numbers” do
- Date.valid\_ordinal?(1582, -79).should == nil
- Date.valid\_ordinal?(2007, -100).should == Date.valid\_ordinal?(2007,

1. 

- ruby\_version\_is “1.9” do
- it “should be able to determine if the date is a valid ordinal  
date” do
- 

```
 # October 1582

```

- 

```
 # S M Tu W Th F S

```

- 

```
 # 274 275 276 277 278 279

```

- 

```
 # 280 281 282 283 284 285 286

```

- 

```
 # 287 288 289 290 291 292 293

```

- 

```
 # 294

```

- 

```
 Date.valid_ordinal?(1582, 277).should == true

```

- 

```
 Date.valid_ordinal?(1582, 278).should == true

```

- 

```
 Date.valid_ordinal?(1582, 287).should == true

```

- 

```
 Date.valid_ordinal?(1582, 288).should == true

```

- end
- 
- it “should be able to handle negative day numbers” do
- 

```
 # October 1582

```

- 

```
 # S M Tu W Th F S

```

- 

```
 # -82 -81 -80 -79 -78 -77

```

- 

```
 # -76 -75 -74 -73 -72 -71 -70

```

- 

```
 # -69 -68 -67 -66 -65 -64 -63

```

- 

```
 # -62

```

- 

```
 Date.valid_ordinal?(1582, -79).should == true

```

- 

```
 Date.valid_ordinal?(1582, -78).should == true

```

- 

```
 Date.valid_ordinal?(2007, -100).should == true

```

- end  
end

end

## – Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

[http://redmine.ruby-lang.org/issues/show/2676](http://redmine.ruby-lang.org/issues/show/2676)

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [January 28, 2010, 5:00pm UTC](https://www.ruby-forum.com/t/bug-trunk-behavior-change-of-some-methods-of-date-between-1-8-and-1-9/182462/4 "2010-01-28T17:00:23Z")

</div>

> e$B3NG’$G$9$,!"e(B1.8 e$B$@$He(B 1582-10-04 e$B0JA0$Ne(B commercial date e$B$O07$($J$$e(B  
> (1581 e$BG/0JA0$b4^$a$Fe(B) e$B$H$$$&$3$H$G$$$$$G$7$g$&$+!#e(B

e$B$H$$$&$h$j!"%0%l%4%j%\*Nq$G$7$+$D$+$($J$$$h$&$K$7$F$$$^$7$?!#@Z$jBX$($re(B  
e$B4^$`G/$G$b!"$"$/$^$G%0%l%4%j%_Nq$G4_Dj$7$?\>l9g$N$\_$r9M$($k$H$$$&$3$H$G!#e(B

Date.commercial(2,1,1,Date::GREGORIAN).to\_s #=\> “0001-12-31”

1.9 e$B$G$O!"\<B:]$NF|?t$r4pK$K7W;;$9$k$N$G!"$=$&$$$&$3$H$O$J$$$G$9!#e(B
