Местный часовой пояс в Ruby

Необходимо создать приложение Rails, где я хочу получить время в локальном часовом поясе, т.е. если местоположение Дели, часовой пояс должен быть IST, и если местоположение San Fransisco, часовой пояс должен быть PDT.

Как это сделать в рубине на рельсах?

P.S. Один код строки, который может автоматически устанавливать часовой пояс в соответствии с местоположением.

Ответ 1

попробуйте Time.now.getlocal.zone

Ответ 2

Если вам нужен часовой пояс Олсона (потому что трехбуквенные часовые пояса неоднозначны, как и смещения GMT), похоже, что нет никакого способа сделать это в чистом Ruby/Rails. Ruby предоставит только короткий код (в основном через date +%Z), а Rails использует часовой пояс своей конфигурации (по умолчанию: UTC).

Тем не менее, обгон можно заставить работать в сочетании с другим ответом:

def get_local_timezone_str
  # Yes, this is actually a shell script…
  olsontz = `if [ -f /etc/timezone ]; then
    cat /etc/timezone
  elif [ -h /etc/localtime ]; then
    readlink /etc/localtime | sed "s/\\/usr\\/share\\/zoneinfo\\///"
  else
    checksum=\`md5sum /etc/localtime | cut -d' ' -f1\`
    find /usr/share/zoneinfo/ -type f -exec md5sum {} \\; | grep "^$checksum" | sed "s/.*\\/usr\\/share\\/zoneinfo\\///" | head -n 1
  fi`.chomp

  # …and it almost certainly won't work with Windows or weird *nixes
  throw "Olson time zone could not be determined" if olsontz.nil? || olsontz.empty?
  return olsontz
end