Module: Lazier::TimeZone
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/lazier/datetime.rb
Overview
Extensions for timezone objects.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#aliases(dst_label = nil) ⇒ Array
Returns a list of valid aliases (city names) for this timezone (basing on offset).
-
#current_offset(rational = false, date = nil) ⇒ Fixnum|Rational
Returns the current offset for this timezone, taking care of Daylight Saving Time (DST).
-
#dst_correction(rational = false, year = nil) ⇒ Fixnum|Rational
Return the correction applied to the standard offset the timezone when the Daylight Saving Time (DST) is active.
-
#dst_name(dst_label = nil, year = nil, name = nil) ⇒ String
Returns the name for this zone with Daylight Saving Time (DST) active.
-
#dst_offset(rational = false, year = nil) ⇒ Fixnum|Rational
Returns the standard offset for this timezone timezone when the Daylight Saving Time (DST) is active.
-
#dst_period(year = nil) ⇒ TimezonePeriod
Gets a period for this timezone when the Daylight Saving Time (DST) is active (it takes care of different hemispheres).
-
#offset(rational = false) ⇒ Fixnum|Rational
Returns the standard offset for this timezone.
-
#to_str(name = nil, colon = true) ⇒ String
Returns the name for this zone with Daylight Saving Time (DST) active.
-
#to_str_parameterized(with_offset = true, name = nil) ⇒ String
Returns a parametized string representation for this zone.
-
#to_str_with_dst(dst_label = nil, year = nil, name = nil) ⇒ String
Returns a string representation for this zone with Daylight Saving Time (DST) active.
-
#to_str_with_dst_parameterized(dst_label = nil, with_offset = true, year = nil, name = nil) ⇒ String
Returns a parametized string representation for this zone with Daylight Saving Time (DST) active.
-
#uses_dst?(reference = nil) ⇒ Boolean
Checks if the timezone uses Daylight Saving Time (DST) for that date or year.
Instance Method Details
#aliases(dst_label = nil) ⇒ Array
Returns a list of valid aliases (city names) for this timezone (basing on offset).
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 |
# File 'lib/lazier/datetime.rb', line 388 def aliases(dst_label = nil) reference = self.name reference = self.class::MAPPING[self.name] if self.class::MAPPING.has_key?(self.name) # We are an alias reference = reference.gsub("_", " ") if @aliases.blank? then # First we search for aliases by name @aliases = [reference] self.class::MAPPING.each do |name, zone| if zone.gsub("_", " ") == reference then if name == "International Date Line West" || name == "UTC" || name.include?("(US & Canada)") @aliases << name else @aliases << reference.gsub(/\/.*/, "/" + name) end end end @aliases = @aliases.uniq.compact.sort end @aliases end |
#current_offset(rational = false, date = nil) ⇒ Fixnum|Rational
Returns the current offset for this timezone, taking care of Daylight Saving Time (DST).
418 419 420 421 422 423 424 425 |
# File 'lib/lazier/datetime.rb', line 418 def current_offset(rational = false, date = nil) date ||= ::DateTime.now dst_period = self.dst_period rv = (self.period_for_utc(date.utc).dst? ? self.dst_offset : self.offset) rational ? self.class.rationalize_offset(rv) : rv end |
#dst_correction(rational = false, year = nil) ⇒ Fixnum|Rational
Return the correction applied to the standard offset the timezone when the Daylight Saving Time (DST) is active.
468 469 470 471 472 |
# File 'lib/lazier/datetime.rb', line 468 def dst_correction(rational = false, year = nil) period = self.dst_period(year) rv = period ? period.std_offset : 0 rational ? self.class.rationalize_offset(rv) : rv end |
#dst_name(dst_label = nil, year = nil, name = nil) ⇒ String
Returns the name for this zone with Daylight Saving Time (DST) active.
491 492 493 494 495 496 |
# File 'lib/lazier/datetime.rb', line 491 def dst_name(dst_label = nil, year = nil, name = nil) dst_label ||= "(DST)" name ||= self.name self.uses_dst?(year) ? "#{name} #{dst_label}" : nil end |
#dst_offset(rational = false, year = nil) ⇒ Fixnum|Rational
Returns the standard offset for this timezone timezone when the Daylight Saving Time (DST) is active.
479 480 481 482 483 |
# File 'lib/lazier/datetime.rb', line 479 def dst_offset(rational = false, year = nil) period = self.dst_period(year) rv = period ? period.utc_total_offset : 0 rational ? self.class.rationalize_offset(rv) : rv end |
#dst_period(year = nil) ⇒ TimezonePeriod
Gets a period for this timezone when the Daylight Saving Time (DST) is active (it takes care of different hemispheres).
440 441 442 443 444 445 446 447 448 449 |
# File 'lib/lazier/datetime.rb', line 440 def dst_period(year = nil) year ||= ::Date.today.year nothern_summer = ::DateTime.civil(year, 7, 15).utc # This is a representation of a summer period in the Northern Hemisphere. southern_summer = ::DateTime.civil(year, 1, 15).utc # This is a representation of a summer period in the Northern Hemisphere. period = self.period_for_utc(nothern_summer) period = self.period_for_utc(southern_summer) if !period.dst? period.dst? ? period : nil end |
#offset(rational = false) ⇒ Fixnum|Rational
Returns the standard offset for this timezone.
431 432 433 434 |
# File 'lib/lazier/datetime.rb', line 431 def offset(rational = false) rv = self.utc_offset rational ? self.class.rationalize_offset(rv) : rv end |
#to_str(name = nil, colon = true) ⇒ String
Returns the name for this zone with Daylight Saving Time (DST) active.
503 504 505 506 |
# File 'lib/lazier/datetime.rb', line 503 def to_str(name = nil, colon = true) name ||= self.aliases.first "(GMT#{self.formatted_offset(colon)}) #{name}" end |
#to_str_parameterized(with_offset = true, name = nil) ⇒ String
Returns a parametized string representation for this zone.
532 533 534 |
# File 'lib/lazier/datetime.rb', line 532 def to_str_parameterized(with_offset = true, name = nil) ::ActiveSupport::TimeZone.parameterize_zone(name || self.to_str, with_offset) end |
#to_str_with_dst(dst_label = nil, year = nil, name = nil) ⇒ String
Returns a string representation for this zone with Daylight Saving Time (DST) active.
514 515 516 517 518 519 520 521 522 523 524 525 |
# File 'lib/lazier/datetime.rb', line 514 def to_str_with_dst(dst_label = nil, year = nil, name = nil) dst_label ||= "(DST)" name ||= self.aliases.first if self.uses_dst?(year) then period = self.dst_period(year) offset = self.class.seconds_to_utc_offset(period.utc_total_offset) "(GMT#{offset}) #{name} #{dst_label}" else nil end end |
#to_str_with_dst_parameterized(dst_label = nil, with_offset = true, year = nil, name = nil) ⇒ String
Returns a parametized string representation for this zone with Daylight Saving Time (DST) active.
543 544 545 546 |
# File 'lib/lazier/datetime.rb', line 543 def to_str_with_dst_parameterized(dst_label = nil, with_offset = true, year = nil, name = nil) rv = self.to_str_with_dst(dst_label, year, name) rv ? ::ActiveSupport::TimeZone.parameterize_zone(rv) : nil end |
#uses_dst?(reference = nil) ⇒ Boolean
Checks if the timezone uses Daylight Saving Time (DST) for that date or year.
455 456 457 458 459 460 461 |
# File 'lib/lazier/datetime.rb', line 455 def uses_dst?(reference = nil) if reference.respond_to?(:year) && reference.respond_to?(:utc) then # This is a date like object self.dst_period(reference.year).present? && self.period_for_utc(reference.utc).dst? else self.dst_period(reference).present? end end |