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