Class: Date

Inherits:
Object
  • Object
show all
Defined in:
lib/zones.rb

Overview

/*

* date ::= yeardate time_opt timezone_opt
* yeardate ::= year colon_opt month colon_opt day
* year ::= sign_opt digit{4,6}
* colon_opt :: <empty> | ':'
* sign ::= '+' | '-'
* sign_opt ::=  <empty> | sign
* month ::= digit{2}
* day ::= digit{2}
* time_opt ::= <empty> | (' ' | 'T') hour minutes_opt
* minutes_opt ::= <empty> | colon_opt digit{2} seconds_opt
* seconds_opt ::= <empty> | colon_opt digit{2} millis_opt
* micros_opt ::= <empty> | ('.' | ',') digit+
* timezone_opt ::= <empty> | space_opt timezone
* space_opt :: ' ' | <empty>
* timezone ::= 'z' | 'Z' | sign digit{2} timezonemins_opt
* timezonemins_opt ::= <empty> | colon_opt digit{2}
*/

static final RegExp _parseFormat =

RegExp(r'^([+-]?\d{4,6})-?(\d\d)-?(\d\d)' // Day part.
    r'(?:[ T](\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d+))?)?)?' // Time part.
    r'( ?[zZ]| ?([-+])(\d\d)(?::?(\d\d))?)?)?$'); // Timezone part.

Class Method Summary collapse

Class Method Details

.parse_str(str) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/zones.rb', line 29

def self.parse_str(str)
  case str
  when %r!^((?:19|20)\d\d)(\d\d)(\d\d)(\d\d)!
    ymd = [$1.to_i, $2.to_i, $3.to_i]
  when %r!^
    (?:(0[1-9]|[12]\d|3[01]|[1-9][-/ ])[-/ ]? #  $1: day
       ((?>[a-z]{3,9}))[-/ ]?                 #  $2: month
       ((?>19|20)\d\d)                        #  $3: year
    | # or...
       ((?>19|20)\d\d)[-/]?                   #  $4: year
       (0[1-9]|1[012]|[1-9][-/])[-/]?         #  $5: month
       (0[1-9]|[12]\d|3[01]|[1-9][\sT])       #  $6: day
    | # or...
       (0[1-9]|1[012]|[1-9][-/])[-/]?         #  $7: month
       (0[1-9]|[12]\d|3[01]|[1-9][-/])[-/]?   #  $8: day
       ((?>19|20)\d\d)                        #  $9: year
    )
  !iox
    ymd = $1 ? [$3.to_i, month_num($2), $1.to_i] : $4 ? [$4.to_i, $5.to_i, $6.to_i] : [$9.to_i, $7.to_i, $8.to_i]
  else
    raise "can't parse: #{str}"
  end
  ymd
end

.to_day(str) ⇒ Object

parse date



55
56
57
58
# File 'lib/zones.rb', line 55

def self.to_day(str)
  ymd = parse_str(str)
  out = Date.new(*ymd)
end