13

Rails で API を作成していますが、応答の一部に日付が含まれています。私のデータベースでは、フィールドは日時フィールドとして設定されており、レールはオブジェクトに変わりActiveSupport::TimeWithZoneます。日時を含むリクエストに応答すると、次のようなものが得られると予想されます

2013-07-23T01:18:32Z 

しかし、代わりに、私は得ています

2013-07-23T01:18:32.000Z

.000最後に追加があるのはなぜですか?現在、これは私が書いているクライアントのコードを壊しています。明らかに、クライアントが予期している形式を変更することでクライアントを修正できますが、そもそもレールがこれを行っている理由を知りたい.000です。

4

5 に答える 5

8

Google からここに来る他の人のために。関連する質問があり、Rails 4.1+ の最新の回答がここにあります

時間の JSON エンコードの精度が構成可能になりました。Rails アップグレード ガイドによると、モンキー パッチの代わりに次の行を初期化子に追加できるようになりました。

ActiveSupport::JSON::Encoding.time_precision = 3
于 2016-06-17T17:54:44.360 に答える
7

ミリ秒なしの形式に戻したい場合は、次のコードで初期化子を追加できます。

    class ActiveSupport::TimeWithZone
    #Changing the as_json method to remove the milliseconds from TimeWithZone to_json result (just like in Rails 3)
        def as_json(options = {})
            if ActiveSupport::JSON::Encoding.use_standard_json_time_format
                xmlschema
            else
                %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
            end
        end
    end
于 2014-01-06T09:18:29.970 に答える
6

私は最近同じ問題を抱えていました。

そして、コミットログを見つけました。 https://github.com/rails/rails/pull/9128

于 2013-08-20T17:04:45.660 に答える
0

これもうまくいくかもしれません

# With ActiveSupport::JSON::Encoding.use_standard_json_time_format = true
Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").to_json
# => "2005-02-01T05:15:10.000-10:00"

# With ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").to_json
# => "2005/02/01 05:15:10 -1000"

http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-as_json

于 2014-08-26T10:34:44.537 に答える