【问题标题】:Getting local time获取当地时间
【发布时间】:2010-07-28 09:21:51
【问题描述】:

我把这个时间存储为一个字符串:

2010-07-25 04:16:25

这是我采取某些行动的格林威治标准时间。

由于我住在耶路撒冷时区,我想在耶路撒冷时间显示它,即早上 07:16,而不是 3 小时前的 GMT 时间 04:16:25。

如何使用 Ruby on Rails 以编程方式正确转换它?我似乎迷失了在为来自不同位置的用户提供服务时需要考虑的众多时区函数和注意事项。

我试过了: Time.parse("2010-07-25 04:16:25") 它给了我: “2010 年 7 月 25 日星期日 04:16:25 +0300”。

我想“+0300”与我所在的位置不同?

对此有所了解,或者甚至是指向一篇假设您了解不多的好文章的链接,都会有所帮助。

【问题讨论】:

    标签: ruby-on-rails timezone local


    【解决方案1】:

    您可以在 environment.rb 文件(如果您使用 Rails 2.3.*)或 application.rb(如果您使用 Rails 3)中定义您的时区。

    只需查找有关时区的部分,所有内容都在评论中进行了解释。它会这样说(这是来自 Rails 3):

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
    # config.time_zone = 'Central Time (US & Canada)'
    

    只需取消最后一行的注释就可以了。

    【讨论】:

    • 嘿 Slobodan,感谢您的回答,我没有在我的电子邮件中收到它,只是在此处的网站上。我已经在 environment.rb 中设置了耶路撒冷时区(是的,我已经重新启动了应用程序)。我需要的还不止这些。正如我所说,当我显示这个时间时,我得到“Sun Jul 25 04:16:25 +0300 2010”而不是我的耶路撒冷时间。也许我应该搬到英国? :-) 我将如何在我自己的时区显示这个明显的 GMT 时间?
    • 实际上,现在我仔细观察,这不是 UTC/GMT 时间。现在是 UTC+3,也就是耶路撒冷时间。想想看。当你这样做时: Time.parse("2010-07-25 04:16:25") 它给了你: "Sun Jul 25 04:16:25 +0300 2010" - 这是你输入的时间,Rails 认为已经解析时间在耶路撒冷时区,它返回了适当的时间对象。您可以通过在末尾添加 GMT 来告诉 Time.parse 您有不同的时区,例如: Time.parse("2010-07-25 04:16:25 GMT") => Sun Jul 25 07:16:25 + 0300 2010
    【解决方案2】:

    要轻松配置它与您的系统本地区域相关,您可以在 application.rb 中添加它

    config.time_zone = Time.now.zone
    

    你可以使用这样的东西来获取本地时间

    Post.created_at.localtime
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2021-11-27
      • 2011-01-30
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多