class Icalendar::Timezone
def daylight_for(local)
def daylight_for(local) possible = daylights.map do |day| prev = day.previous_occurrence(local.to_time) [prev, day] unless prev.nil? end.compact possible.sort_by(&:first).last end
def initialize
def initialize super 'timezone' end
def offset_for_local(local)
def offset_for_local(local) standard = standard_for local daylight = daylight_for local if standard.nil? && daylight.nil? "+00:00" elsif daylight.nil? standard.last.tzoffsetto elsif standard.nil? daylight.last.tzoffsetto else sdst = standard.first ddst = daylight.first if sdst > ddst standard.last.tzoffsetto else daylight.last.tzoffsetto end end end
def standard_for(local)
def standard_for(local) possible = standards.map do |std| prev = std.previous_occurrence(local.to_time) [prev, std] unless prev.nil? end.compact possible.sort_by(&:first).last end
def valid?(strict = false)
def valid?(strict = false) daylights.empty? && standards.empty? and return false daylights.all? { |d| d.valid? strict } or return false standards.all? { |s| s.valid? strict } or return false super end