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.
373 374 375 376 377 |
# File 'lib/lazier/datetime.rb', line 373 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.
299 300 301 302 303 304 305 306 307 308 309 |
# File 'lib/lazier/datetime.rb', line 299 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.
290 291 292 |
# File 'lib/lazier/datetime.rb', line 290 def format_offset(offset, colon = true) self.seconds_to_utc_offset(offset.is_a?(::Rational) ? (offset * 86400).to_i : offset, colon) end |
- (Array) list_all(with_dst = true, dst_label = nil)
Returns a list of names of all timezones.
316 317 318 319 320 321 322 323 |
# File 'lib/lazier/datetime.rb', line 316 def list_all(with_dst = true, dst_label = nil) dst_label ||= "(DST)" @zones_names ||= { "STANDARD" => ::ActiveSupport::TimeZone.all.map(&:to_s) } @zones_names["DST[#{dst_label}]-STANDARD"] ||= ::ActiveSupport::TimeZone.all.map { |zone| fetch_aliases(zone, dst_label) }.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.
ruby
DateTime.parameterize_zone(ActiveSupport::TimeZone["Pacific Time (US & Canada)"])
# => "-0800@pacific-time-us-canada"
334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/lazier/datetime.rb', line 334 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 |
# File 'lib/lazier/datetime.rb', line 281 def rationalize_offset(offset) ::TZInfo::OffsetRationals.rational_for_offset(offset.is_a?(::Fixnum) ? offset : offset.offset) end |
- (String|TimeZone) unparameterize_zone(tz, as_string = false, dst_label = nil)
Finds a parameterized timezone.
353 354 355 356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/lazier/datetime.rb', line 353 def unparameterize_zone(tz, as_string = false, dst_label = nil) tz = parameterize_zone(tz, false) matcher = /(#{Regexp.quote(tz)})$/ rv = catch(:zone) do list_all(true, dst_label).each do |zone| throw(:zone, zone) if parameterize_zone(zone, false) =~ matcher end nil end rv ? (as_string ? rv : self.find(rv, dst_label)) : nil end |