Ruby中的本地时区

时间:2012-09-16 08:04:27

标签: ruby-on-rails-3 timezone

需要创建一个Rails应用程序,我想在当地时区获取时间,即如果位置德里,时区应 IST ,如果是位置 San Fransisco 时区应为 PDT

如何在ruby on rails上完成此操作?

P.S。一行代码,可根据位置自动设置时区。

2 个答案:

答案 0 :(得分:22)

试试这个Time.now.getlocal.zone

答案 1 :(得分:3)

如果您需要Olson时区(因为三个字母的时区不明确,GMT偏移也是如此),看起来在纯Ruby / Rails中无法做到这一点。 Ruby只提供短代码(基本上通过date +%Z),Rails使用其配置的时区(默认值:UTC)。

即,shelling out can be made to workanother answer结合使用:

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