module Jekyll::Utils::WinTZ

Public Instance Methods

calculate(timezone) click to toggle source

Public: Calculate the Timezone for Windows when the config file has a defined

'timezone' key.

timezone - the IANA Time Zone specified in “_config.yml”

Returns a string that ultimately re-defines ENV in Windows

# File lib/ngage/jekyll/utils/win_tz.rb, line 14
def calculate(timezone)
  External.require_with_graceful_fail("tzinfo") unless defined?(TZInfo)
  tz = TZInfo::Timezone.get(timezone)
  difference = Time.now.to_i - tz.now.to_i
  #
  # POSIX style definition reverses the offset sign.
  #   e.g. Eastern Standard Time (EST) that is 5Hrs. to the 'west' of Prime Meridian
  #   is denoted as:
  #     EST+5 (or) EST+05:00
  # Reference: http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
  sign = difference.negative? ? "-" : "+"
  offset = sign == "-" ? "+" : "-" unless difference.zero?
  #
  # convert the difference (in seconds) to hours, as a rational number, and perform
  # a modulo operation on it.
  modulo = modulo_of(rational_hour(difference))
  #
  # Format the hour as a two-digit number.
  # Establish the minutes based on modulo expression.
  hh = format("%02d", absolute_hour(difference).ceil)
  mm = modulo.zero? ? "00" : "30"

  Jekyll.logger.debug "Timezone:", "#{timezone} #{offset}#{hh}:#{mm}"
  #
  # Note: The 3-letter-word below doesn't have a particular significance.
  "WTZ#{sign}#{hh}:#{mm}"
end

Private Instance Methods

absolute_hour(seconds) click to toggle source

Private: Convert given seconds to an hour as an absolute number.

seconds - supplied as an integer, it is converted to its absolute. 3600 - no. of seconds in an hour.

Returns an integer.

# File lib/ngage/jekyll/utils/win_tz.rb, line 60
def absolute_hour(seconds)
  seconds.abs / 3600
end
modulo_of(fraction) click to toggle source

Private: Perform a modulo operation on a given fraction.

fraction - supplied as a rational number, its numerator is divided

by its denominator and the remainder returned.

Returns an integer.

# File lib/ngage/jekyll/utils/win_tz.rb, line 70
def modulo_of(fraction)
  fraction.numerator % fraction.denominator
end
rational_hour(seconds) click to toggle source

Private: Convert given seconds to an hour as a rational number.

seconds - supplied as an integer, it is converted to a rational number. 3600 - no. of seconds in an hour.

Returns a rational number.

# File lib/ngage/jekyll/utils/win_tz.rb, line 50
def rational_hour(seconds)
  seconds.to_r / 3600
end