【问题标题】:How to convert time with timezone in ruby如何在 ruby​​ 中用时区转换时间
【发布时间】:2014-11-03 12:01:00
【问题描述】:

我想通过时区传递时间来转换时间。

编写一个将时间与时区转换的方法。

Time.now + Time.zone_offset("PST")

会有用吗?

我需要一个 ruby​​ 中的方法。

【问题讨论】:

  • 您使用的是哪个版本的 Ruby?并且没有像 Ruby 中的 Time.zone_offset("PST") 这样的方法(除非您使用的是 Rails)。
  • @User089247 我正在使用 ruby​​ - 2.0.0p247v。我不知道如何转换。我必须使用哪种方法。
  • 抱歉,我错了。你可以这样做:Time.now + Time.zone_offset("PST") 如果你:require 'time' 在你的 ruby​​ 脚本中。猜猜,应该在评论之前做到这一点。那么,您到底在寻找什么?

标签: ruby time timezone


【解决方案1】:

没有办法,不过你可以自己做一个:

class Time
  require 'time'
  def self.by_offset(offset)
    at(now + zone_offset(offset))
  end
end

现在,您可以:

Time.by_offset('PST')
#=> 2014-11-03 10:11:14 +0530
Time.now
#=> 2014-11-03 18:11:13 +0530

使用 1.9.2、2.0.0 和 2.1.2 Rubies (MRI) 进行测试。

【讨论】:

  • 找到了..很奇怪..我的输出不是你.. :-(
  • 哎呀!那是真的..知道了..我忘了我们在不同的时区..呵呵呵呵:-)
【解决方案2】:

看看in_time_zone

 > Time.zone = 'Hawaii'  
 => "Hawaii" 
 > DateTime.now.in_time_zone 
 => Mon, 03 Nov 2014 04:00:29 HST -10:00   # UTC-10:00
 > DateTime.now
 => Mon, 03 Nov 2014 19:30:41 +0530  # UTC+05:30
 > Time.zone = "Eastern Time (US & Canada)"
 => "Eastern Time (US & Canada)" 
 > DateTime.now.in_time_zone
 => Mon, 03 Nov 2014 09:03:34 EST -05:00 

【讨论】:

  • in_time_zone 是 Rails 方法,因此不适用于一般的 Ruby 使用。
【解决方案3】:

“PST”仅代表属于太平洋标准时间的太平洋时区部分。要完全表示时区,您还必须考虑太平洋夏令时间。

要在 Ruby 中执行此操作,您应该使用 tzinfo gem,如下所示:

require 'tzinfo'
tz = TZInfo::Timezone.get('America/Los_Angeles')
now = tz.now

另请参阅the timezone tag wiki 中的“时区!= 偏移量”。

【讨论】:

    【解决方案4】:

    不存在直接方法。但是你可以解决它

    >> a = %w(%Y %m %d %H %M %S)
    => ["%Y", "%m", "%d", "%H", "%M", "%S"]
    >> tm = Time.now
    => 2014-11-03 17:46:02 +0530
    >> a.map { |s| tm.strftime(s) }
    => ["2014", "11", "03", "17", "46", "02"]
    >> a.map! { |s| tm.strftime(s).to_i }
    => [2014, 11, 3, 17, 46, 2]
    >> Time.new(*a, Time.zone_offset('PST'))
    => 2014-11-03 17:46:02 -0800
    

    查看new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time 文档。 utc_offset for PST-08:00

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2014-07-02
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多