【问题标题】:Converting Time in UTC to Pacific time将 UTC 时间转换为太平洋时间
【发布时间】:2011-03-13 22:37:59
【问题描述】:

我从外部方法得到一个字符串,其时间和日期如下"07/09/10 14:50" 有没有什么办法可以在知道其“UTC”时间的情况下将 ruby​​ 中的时间转换为“美国太平洋”时间?是否考虑了日期的变化?即如果时差导致一天不同。

【问题讨论】:

标签: ruby datetime timezone


【解决方案1】:

由于您使用的是 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)")

【讨论】:

  • 我看过这篇文章,但它没有显示我如何从字符串形式转换为日期或时间对象?如果我在字符串“07/09/10 14:50”上调用该方法,则该方法有效
  • 我添加了Time.parse 语句以从字符串中获取时间。
【解决方案2】:

要将字符串形式转换为日期或时间对象,您需要使用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 点,这可能是您所期望的)。
【解决方案3】:

需要“时间”

如果您想要太平洋时间,只需从 Time.new 中减去 25200 秒。太平洋时间和 GMT 之间有 7 小时的差异。

t = Time.parse((Time.new-25200).to_s)

然后使用 strftime 格式化你想要的格式。

puts t.strftime("%A %D at %I:%M%p")

【讨论】:

  • 非常不鼓励手动处理时区。 Elanguage 拥有最好的工具。你考虑过夏令时吗?飞跃?
  • 不仅气馁,而且在这种情况下大错特错。从日期中减去固定时间来转换时区会忽略夏令时
  • 我刚刚意识到为什么上面的代码对我不起作用。我使用云 9 服务器必须在另一个时区。我在 Eclipse 中添加了 Ruby 语言,然后添加了以下代码,它为我提供了 PST 中的当前时间。 time = Time.new() puts time.strftime("%I:%M:%S")
  • 无论如何都感谢您的投入...很高兴看到每个人都对编程充满热情!!!! :)
猜你喜欢
  • 2021-03-02
  • 2014-11-25
  • 2018-09-15
  • 2012-12-08
  • 2021-09-05
  • 2020-11-26
  • 2018-04-25
  • 1970-01-01
  • 2018-10-04
相关资源
最近更新 更多