I need to check some file dates against the budgetary periods of our
company, to determine where those files get placed. I’m playing with the
Time.local object. I’ve proven that I can denote which budget period I’m
in by using the .between? method. But, I get this weird “octal digit”
error with some of my date entries.
irb(main):001:0> t = Time.local(2007,09,09,00,00)
SyntaxError: compile error
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
^
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
^
I don’t get the error when I specify the following date. It doesn’t seem
to like the month of September. (-;
irb(main):005:0> t = Time.local(2007,01,01,00,00)
=> Mon Jan 01 00:00:00 -0500 2007
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
^
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
^
I don’t get the error when I specify the following date. It doesn’t
seem
to like the month of September. (-;
If you put a 0 in front of a number you are specifying an octal
number instead of a decimal number. Octal is base 8, so there is no
such thing as an octal number including a digit greater than 7:
(irb):1: Illegal octal digit
irb(main):005:0> t = Time.local(2007,01,01,00,00)
=> Mon Jan 01 00:00:00 -0500 2007
In Ruby starting an integer with a leading zero designates that it is
in octal notation. The non-negative octal integers start 00, 01, …,
07, 010, 011, … There is no 09.
On Sat, Feb 03, 2007 at 02:58:59AM +0900, Peter B. wrote:
I need to check some file dates against the budgetary periods of our
company, to determine where those files get placed. I’m playing with the
Time.local object. I’ve proven that I can denote which budget period I’m
in by using the .between? method. But, I get this weird “octal digit”
error with some of my date entries.
irb(main):001:0> t = Time.local(2007,09,09,00,00)
SyntaxError: compile error
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
Numeric literals starting with 0' are interpreted as octal numbers. Try dropping the leading0’'s.
^
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
^
I don’t get the error when I specify the following date. It doesn’t seem
to like the month of September. (-;
irb(main):005:0> t = Time.local(2007,01,01,00,00)
=> Mon Jan 01 00:00:00 -0500 2007
That’s because there is no 9' in the base-8 number system, just like there is noA’ in the regular base-10 number system (but there is in the base-16
system a.k.a. hexadecimal).
(irb):1: Illegal octal digit
t = Time.local(2007,09,09,00,00)
^
The problem is the leading zero. Time.local(2007, 9, 9, 0, 0) works
fine.
Number literals with a zero at the beginning are interpreted as octal
numbers. Since octal numbers only use digits 0…7, 9 is rejected (as
would be 8).
HTH,
AdSR
You’re all brilliant. Thanks. Yes, when I re-looked into my book that
was guiding me with this, I see that all of their sample don’t have a
leading zero.
-Peter
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.