class Time

Public Class Methods

iso8601(time) click to toggle source
# File motion/core/time.rb, line 3
def self.iso8601(time)
  if time.include?(".")
    # Fractional Seconds
    if time.include?('Z')
      iso8601_with_fractional_seconds(time)
    else
      iso8601_with_fractional_seconds_and_timesone(time)
    end
  else
    # Non Fractional Seconds
    if time.include?('Z')
      iso8601_zulu(time)
    else
      iso8601_with_timezone(time)
    end
  end
end
iso8601_with_fractional_seconds(time) click to toggle source
# File motion/core/time.rb, line 31
def self.iso8601_with_fractional_seconds(time)
  cached_date_formatter("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").
    dateFromString(time)
end
iso8601_with_fractional_seconds_and_timesone(time) click to toggle source
# File motion/core/time.rb, line 36
def self.iso8601_with_fractional_seconds_and_timesone(time)
  cached_date_formatter("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ").
    dateFromString(time)
end
iso8601_with_timezone(time) click to toggle source
# File motion/core/time.rb, line 26
def self.iso8601_with_timezone(time)
  cached_date_formatter("yyyy-MM-dd'T'HH:mm:ssZZZZZ").
    dateFromString(time)
end
iso8601_zulu(time) click to toggle source
# File motion/core/time.rb, line 21
def self.iso8601_zulu(time)
  cached_date_formatter("yyyy-MM-dd'T'HH:mm:ss'Z'").
    dateFromString(time)
end

Private Class Methods

cached_date_formatter(dateFormat) click to toggle source
# File motion/core/time.rb, line 43
def self.cached_date_formatter(dateFormat)
  Thread.current[:date_formatters] ||= {}
  Thread.current[:date_formatters][dateFormat] ||=
    NSDateFormatter.alloc.init.tap do |formatter|
      formatter.dateFormat = dateFormat
      formatter.timeZone   = NSTimeZone.timeZoneWithAbbreviation "UTC"
    end
end