Module: Lazier::TimeZone::ClassMethods
- Defined in:
- lib/lazier/datetime.rb
Overview
General methods.
Instance Method Summary (collapse)
-
- (Fixnum) compare(left, right)
Compares two timezones.
-
- (TimeZone) find(name, dst_label = nil)
Find a zone by its name.
-
- (String) format_offset(offset, colon = true)
Returns a +HH:MM formatted representation of the offset.
-
- (Array) list_all(with_dst = true, dst_label = nil)
Returns a list of names of all timezones.
-
- (String) parameterize_zone(tz, with_offset = true)
Returns a string representation of a timezone.
-
- (Rational) rationalize_offset(offset)
Returns an offset in rational value.
-
- (String|TimeZone) unparameterize_zone(tz, as_string = false, dst_label = nil)
Finds a parameterized timezone.
Instance Method Details
- (Fixnum) compare(left, right)
Compares two timezones. They are sorted by the location name.
379 380 381 382 383 |
# File 'lib/lazier/datetime.rb', line 379 def compare(left, right) left = left.to_str if left.is_a?(::ActiveSupport::TimeZone) right = right.to_str if right.is_a?(::ActiveSupport::TimeZone) left.ensure_string.split(" ", 2)[1] <=> right.ensure_string.split(" ", 2)[1] end |
- (TimeZone) find(name, dst_label = nil)
Find a zone by its name.
301 302 303 304 305 306 307 308 309 310 311 |
# File 'lib/lazier/datetime.rb', line 301 def find(name, dst_label = nil) catch(:zone) do ::ActiveSupport::TimeZone.all.each do |zone| zone.aliases.each do |zone_alias| throw(:zone, zone) if [zone.to_str(zone_alias), zone.to_str_with_dst(dst_label, nil, zone_alias)].include?(name) end end nil end end |
- (String) format_offset(offset, colon = true)
Returns a +HH:MM formatted representation of the offset.
291 292 293 294 |
# File 'lib/lazier/datetime.rb', line 291 def format_offset(offset, colon = true) offset = (offset * 86400).to_i if offset.is_a?(::Rational) offset.is_a?(::Fixnum) ? self.seconds_to_utc_offset(offset, colon) : nil end |
- (Array) list_all(with_dst = true, dst_label = nil)
Returns a list of names of all timezones.
318 319 320 321 322 323 324 325 326 327 |
# File 'lib/lazier/datetime.rb', line 318 def list_all(with_dst = true, dst_label = nil) dst_label ||= "(DST)" @zones_names ||= { "STANDARD" => ::ActiveSupport::TimeZone.all.collect(&:to_s) } @zones_names["DST[#{dst_label}]-STANDARD"] ||= ::ActiveSupport::TimeZone.all.collect { |zone| zone.aliases.collect { |zone_alias| [zone.to_str(zone_alias), (zone.uses_dst? && zone_alias !~ /(#{Regexp.quote(dst_label)})$/) ? zone.to_str_with_dst(dst_label, nil, zone_alias) : nil] } }.flatten.compact.uniq.sort { |a,b| ::ActiveSupport::TimeZone.compare(a, b) } # Sort by name @zones_names["#{with_dst ? "DST[#{dst_label}]-" : ""}STANDARD"] end |
- (String) parameterize_zone(tz, with_offset = true)
Returns a string representation of a timezone.
DateTime.parameterize_zone(ActiveSupport::TimeZone["Pacific Time (US & Canada)"])
# => "-0800@pacific-time-us-canada"
338 339 340 341 342 343 344 345 346 347 348 |
# File 'lib/lazier/datetime.rb', line 338 def parameterize_zone(tz, with_offset = true) tz = tz.to_s if !tz.is_a?(::String) if tz =~ /^(\([a-z]+([+-])(\d{2})(:?)(\d{2})\)\s(.+))$/i then with_offset ? "#{$2}#{$3}#{$5}@#{$6.parameterize}" : $6.parameterize elsif !with_offset then tz.gsub(/^([+-]?(\d{2})(:?)(\d{2})@)/, "") else tz.parameterize end end |
- (Rational) rationalize_offset(offset)
Returns an offset in rational value.
281 282 283 284 |
# File 'lib/lazier/datetime.rb', line 281 def rationalize_offset(offset) offset = offset.try(:offset) if !offset.is_a?(::Fixnum) ::TZInfo::OffsetRationals.rational_for_offset(offset.to_integer) end |
- (String|TimeZone) unparameterize_zone(tz, as_string = false, dst_label = nil)
Finds a parameterized timezone.
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 |
# File 'lib/lazier/datetime.rb', line 357 def unparameterize_zone(tz, as_string = false, dst_label = nil) tz = self.parameterize_zone(tz, false) rv = catch(:zone) do self.list_all(true, dst_label).each do |zone| throw(:zone, zone) if self.parameterize_zone(zone, false) =~ /(#{Regexp.quote(tz)})$/ end nil end if rv then (as_string ? rv : self.find(rv, dst_label)) else nil end end |