【问题标题】:How to change the project default Time format in Rails如何在 Rails 中更改项目默认时间格式
【发布时间】:2014-11-20 14:56:02
【问题描述】:

在我更新 Rails 之前,API 返回的默认时间格式是yyyy-MM-dd'T'HH:mm:ss'Z'。现在它返回yyyy-MM-dd'T'HH:mm:ss:sss'Z'。由于依赖旧时间格式的应用程序,我想将其改回。如何更改Time::DateTimeto_s 方法返回的这个PROJECT 默认格式?

编辑:

我应该提到我开始使用active_model_serializer gem。不确定这是否会有所作为。我的猜测是这种变化发生在从 Rails 4.0.x 更新到 4.1.x 之后。我也想为项目更改这种格式。这种格式在 Rails 版本之间发生了变化。 active_model_serializer 使用 to_s,因此覆盖如何投影集更有意义。我不知道那是哪里。

【问题讨论】:

    标签: datetime ruby-on-rails-4 active-model-serializers


    【解决方案1】:

    你可以使用strftime:

    Time.now.strftime("%Y-%M-%d %H:%m:%S%Z")
    

    您的其中一个宝石可能会覆盖 DateTime to_s 方法。你可以用你自己的方法再次覆盖它

    【讨论】:

    • 问题标题为project Time format。我从来没有格式化过。它默认返回yyyy-MM-dd'T'HH:mm:ss'Z'
    • 查看源代码显示没有覆盖 to_s 甚至没有引用任何特定对象。虽然你没有错,但你没有回答这个问题。告诉我如何更改 Rails 项目中 Time 的默认 to_s 实现可能会有所帮助,以便它反映我的所有代码。如果不可能,那就另当别论了。
    • 你只需要用一个方法to_s创建一个名为DateTime的类就可以了,它会覆盖默认的DateTime to_s实现
    【解决方案2】:

    也许你需要这个:

    # config/initializers/time_with_zone.rb
    
    module ActiveSupport
      class TimeWithZone
        def as_json(options = nil)
          iso8601
        end
      end
    end
    

    【讨论】:

      【解决方案3】:

      您可以扩充 Ruby 内置的 Date::DATE_FORMATSTime::DATE_FORMATS

      DATE_FORMAT = "%m/%d/%Y".freeze
      TIME_FORMAT = "#{DATE_FORMAT} %l:%M%P".freeze
      
      format_defaults = {
        default: DATE_FORMAT,
        date_time12: TIME_FORMAT,
        date_time24: "#{DATE_FORMAT} %H:%M",
      }.freeze
      
      Date::DATE_FORMATS.merge!(format_defaults)
      Time::DATE_FORMATS.merge!(format_defaults)
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 2013-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多