format_offset

in lib/twitter_cldr/timezones/iso8601_location.rb [68:110]


      def format_offset(offset, is_basic, use_utc_indicator, is_short, ignore_seconds)
        abs_offset = offset.abs
        return UTC if use_utc_indicator && abs_offset == 0

        min_fields_idx = is_short ? 0 : 1
        max_fields_idx = ignore_seconds ? 1 : 2
        sep = is_basic ? nil : ':'

        fields = []
        fields << abs_offset / 60 / 60
        fields << (abs_offset / 60) % 60
        fields << abs_offset % 60

        last_idx = max_fields_idx

        while last_idx > min_fields_idx
          if fields[last_idx] != 0
            break
          end

          last_idx -= 1
        end

        buf = ''
        sign = '+'

        if offset < 0
          if 0.upto(last_idx).any? { |i| fields[i] != 0 }
            sign = '-';
          end
        end

        buf << sign

        0.upto(last_idx) do |i|
          buf << sep if sep && i != 0
          buf << '0' if fields[i] < 10
          buf << fields[i].to_s
        end

        buf
      end