【问题标题】:Rails: how to get datetime from model in original timezone (different entries = different timezones)Rails:如何从原始时区的模型中获取日期时间(不同的条目=不同的时区)
【发布时间】:2017-03-03 10:56:24
【问题描述】:

给定我想用"starts_at"=>"2016-02-04T14:30:00.000+01:00"创建的模型

此条目存储在 postgres 中,starts_at 应保持时区 - 保持原样并在 HTML 中显示很重要,准确这次 - 14:30。 对企业的意义:用户从伦敦节省时间。管理员检查来自澳大利亚的条目,他应该在用户的时区

与用户交谈

同时我需要服务器能够正确理解现在是什么时间,所以我可以“现在选择 1 小时内的条目”

铁轨给:

[28] pry(main)> entry.starts_at
=> 2016-02-04 13:30:00 UTC
[17] pry(main)> entry.attributes_before_type_cast["starts_at"]
=> "2016-02-04 13:30:00+00"

我想 postgress 会丢弃时区,尽管我尝试了输入:

  t.change :starts_at, 'timestamp with time zone'

如何在适当的时区存储/检索字段,该时区存储在 postgress 中。 它可以是不同条目的任何时区,代码不知道哪个条目具有哪个时区,所以我们不能使用in_time_zone(除非我将时区存储在单独的字段中,这似乎太假了)

是否有 do_not_touch_timezones_for :starts_atstarts_at.original_timezone 或全局配置之类的东西。

试过self.skip_time_zone_conversion_for_attributes = [:starts_at, :ends_at] - 没有任何效果

【问题讨论】:

    标签: ruby-on-rails ruby postgresql datetime


    【解决方案1】:

    Time#parse 有什么问题吗?它似乎返回了您想要的时间:

    Time.parse("2016-02-04T14:30:00.000+01:00")
    #=> 2016-02-04 14:30:00 +0100
    

    【讨论】:

    • 如果我将日期作为字符串保存在数据库中,那将是一个解决方案。 (我现在实际上是这样做的:)虽然:datetime 列有解决方案吗?
    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2014-03-15
    • 2020-03-17
    相关资源
    最近更新 更多