【问题标题】:How to set the timezone to EST throughout the rails app?如何在整个 Rails 应用程序中将时区设置为 EST?
【发布时间】:2014-08-07 04:18:26
【问题描述】:

我想在整个应用程序中使用 EST。我已经设置了

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = 'Eastern Time (US & Canada)'

我想要的是,我必须像"DateTime.now" 一样获得我使用过的所有时间,它现在返回我当地时区的时间,但我希望它返回美国东部标准时间的日期时间。我还有日期时间范围选择器,我得到开始日期和结束日期,并使用

将字符串解析为时间
(params[:start_date]).to_time

它还返回本地区域的日期时间,而我希望所有这些都返回 EST。我怎样才能做到这一点?任何帮助表示赞赏。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 timezone


    【解决方案1】:

    通常,除非您为 Active Record 选择了特定的时区,否则数据库中的日期时间将保存为 UTC 格式,如果您必须干预多个时区会更容易。但是,当您访问这些值时,您将获得您选择的 TimeZone 中的值。

    config.time_zone = 'Eastern Time (US & Canada)
    

    现在,假设您在表中有一个 UTC 日期时间值

    datetime1 = "2014-08-25 10:25:57 +0000"

    您可以将其转换为所选时区'Eastern Time (US & Canada)',如下所示,

    Time.zone.parse(datetime1) => Mon, 25 Aug 2014 06:25:57 EDT -04:00
    

    然后,如果您需要正确的格式,请使用方法strftime

    Time.zone.parse("2014-08-25 10:25:57 +0000").strftime("%d-%m-%Y %H:%M:%S") => "25-08-2014 06:25:57"
    

    希望有帮助:)

    【讨论】:

      【解决方案2】:

      DateTime.nowTime.now 不尊重 Time.zone 并且将始终使用服务器时间。如果您使用的机器设置为不同的时区,这两个将使用该时区。

      另一方面,to_time 默认为apidock 中提到的本地时区(尽管刚刚尝试过,默认情况下我得到 utc)。要在时区集中获取这些时间,请附加 in_time_zone

      DateTime.now.in_time_zone
      Time.now.in_time_zone
      string.to_time.in_time_zone
      

      不过有一些捷径。以下代码将返回当前时区的时间戳

      Time.zone.now
      Time.zone.parse(string)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-14
        • 2016-10-04
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 1970-01-01
        • 2011-10-08
        相关资源
        最近更新 更多