【发布时间】:2011-03-13 22:37:59
【问题描述】:
我从外部方法得到一个字符串,其时间和日期如下"07/09/10 14:50" 有没有什么办法可以在知道其“UTC”时间的情况下将 ruby 中的时间转换为“美国太平洋”时间?是否考虑了日期的变化?即如果时差导致一天不同。
【问题讨论】:
我从外部方法得到一个字符串,其时间和日期如下"07/09/10 14:50" 有没有什么办法可以在知道其“UTC”时间的情况下将 ruby 中的时间转换为“美国太平洋”时间?是否考虑了日期的变化?即如果时差导致一天不同。
【问题讨论】:
由于您使用的是 Rails,因此您有很多选择。我建议阅读this article,它讨论了所有关于时区的内容。
要转换为 PST,这两个都是特定于 rails 的方法。无需重新发明轮子:
time = Time.parse("07/09/10 14:50")
time.in_time_zone("Pacific Time (US & Canada)")
希望对你有帮助
更新:rails 可能会尝试变得聪明,并将您指定为字符串的时间指定为时区。为确保时间解析为 UTC,您应在字符串中指定:
time = Time.parse("07/09/10 14:50 UTC")
time.in_time_zone("Pacific Time (US & Canada)")
【讨论】:
Time.parse 语句以从字符串中获取时间。
要将字符串形式转换为日期或时间对象,您需要使用strptime
require 'date'
require 'time'
my_time_string = "07/09/10 14:50"
to_datetime = DateTime.strptime(my_time_string, "%m/%d/%y %H:%M")
utc_time = Time.parse(to_datetime.to_s).utc
pacific_time = utc_time + Time.zone_offset("PDT")
puts utc_time
puts pacific_time
这是纯 ruby,因此可能有一些特定于 rails 的方法可以专门用于此任务,但这应该可以帮助您入门。
【讨论】:
utc_time + Time.zone_offset("PDT"),例如-18000”它会做“减号”,这会产生一个正数,因此会产生加法,这不是你想要的。
PST 是否不是更好的选择,因为PDT 返回白天时间,PST 返回标准时间。目前,使用PDT 偏移量转换UTC 时间不会返回实际的太平洋时间。 (例如:目前是 UTC 时间下午 1 点。使用 PDT 的转换将为您提供上午 6 点,但 PST 将为您提供上午 5 点,这可能是您所期望的)。
需要“时间”
t = Time.parse((Time.new-25200).to_s)
puts t.strftime("%A %D at %I:%M%p")
【讨论】: