Module: CouchRest::Model::CoreExtensions::TimeParsing
- Defined in:
- lib/couchrest/model/core_extensions/time_parsing.rb
Instance Method Summary collapse
-
#new(*args) ⇒ Object
Overrwrite Ruby’s standard new method to provide compatible support of 1.9.2’s Time.new method.
-
#parse_iso8601(string) ⇒ Object
Attemtps to parse a time string in ISO8601 format.
Instance Method Details
#new(*args) ⇒ Object
Overrwrite Ruby’s standard new method to provide compatible support of 1.9.2’s Time.new method.
Only supports syntax like:
Time.new(2011, 4, 1, 18, 50, 32, "+02:00")
# or
Time.new(2011, 4, 1, 18, 50, 32)
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/couchrest/model/core_extensions/time_parsing.rb', line 16 def new(*args) return super() if (args.empty?) zone = args.delete_at(6) time = mktime(*args) if zone =~ /([\+|\-]?)(\d{2}):?(\d{2})/ tz_difference = ("#{$1 == '-' ? '+' : '-'}#{$2}".to_i * 3600) + ($3.to_i * 60) time + tz_difference + zone_offset(time.zone) else time end end |
#parse_iso8601(string) ⇒ Object
Attemtps to parse a time string in ISO8601 format. If no match is found, the standard time parse will be used.
Times, unless provided with a time zone, are assumed to be in UTC.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/couchrest/model/core_extensions/time_parsing.rb', line 35 def parse_iso8601(string) if (string =~ /(\d{4})[\-|\/](\d{2})[\-|\/](\d{2})[T|\s](\d{2}):(\d{2}):(\d{2})(Z| ?([\+|\s|\-])?(\d{2}):?(\d{2}))?/) # $1 = year # $2 = month # $3 = day # $4 = hours # $5 = minutes # $6 = seconds # $7 = UTC or Timezone # $8 = time zone direction # $9 = tz difference hours # $10 = tz difference minutes if (!$7.to_s.empty? && $7 != 'Z') new($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i, "#{$8 == '-' ? '-' : '+'}#{$9}:#{$10}") else utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i) end else parse(string) end end |