What's up with Time.local ?

Discussion in 'Ruby' started by Peter Bailey, Feb 2, 2007.

  1. Peter Bailey

    Peter Bailey Guest

    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

    Thanks,
    Peter
     
    Peter Bailey, Feb 2, 2007
    #1
    1. Advertisements

  2. Peter Bailey

    Eric Hodel Guest

    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:

    t = Time.local 2007, 011, 011, 00, 00

    Instead just use base 10:

    Time.local 2007, 9, 9, 0, 0
     
    Eric Hodel, Feb 2, 2007
    #2
    1. Advertisements

  3. 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.

    Bottom line: drop the leading zeros.

    Regards, Morton
     
    Morton Goldberg, Feb 2, 2007
    #3
  4. Peter Bailey

    Jos Backus Guest

    Numeric literals starting with `0' are interpreted as octal numbers. Try
    dropping the leading `0''s.
    That's because there is no `9' in the base-8 number system, just like there is
    no `A' in the regular base-10 number system (but there is in the base-16
    system a.k.a. hexadecimal).

    Hth,
     
    Jos Backus, Feb 2, 2007
    #4
  5. Peter Bailey

    AdSR Guest

    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
     
    AdSR, Feb 2, 2007
    #5
  6. Peter Bailey

    Peter Bailey Guest

    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
     
    Peter Bailey, Feb 2, 2007
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.