2017-08-23 8 views
0

私はJSON入力を持っています。私はすべてのタイムスタンプ(createdDate、modifiedDate)をルビの時間に変換したいと思います。それ、どうやったら出来るの?私は私がCreatedDateにしてmodifiedDateのために別途のように2に変換し、[OK]午前方法が、くぼみの仕事Ruby:指定されたjson入力のタイムスタンプを日付時刻に変換する

characterList.each { |char| DateTime.strptime(char.try(:getEditInfo).try(:getCreatedDate),%s) } 


{"characterList": 
    [ 
    {"editInfo": 
     {"createdBy": "testname", 
     "createdDate": 1503137795000, 
     "modifiedBy": "testname", 
     "modifiedDate": 1503137795000}, 
    "charInfo": 
     {"charid": "3434", 
     "charDesc": "3434", 
     "status": "ON"} 
    }, 
    {"editInfo": 
     {"createdBy": "testname", 
     "createdDate": 1503137795000, 
     "modifiedBy": "testname", 
     "modifiedDate": 1503137795000}, 
    "charInfo": 
     {"charid": "3434 6", 
     "charDesc": "43dfdf", 
     "status": "ON"} 
    }, 
    {"editInfo": 
     {"createdBy": "testname", 
     "createdDate": 1503137795000, 
     "modifiedBy": "testname", 
     "modifiedDate": 1503137795000}, 
    "charInfo": 
     {"charid": "4hr_SLA", 
     "charDesc": "sd", 
     "status": "ON"} 
    }, 
    {"editInfo": 
     {"createdBy": "testname", 
     "createdDate": 1503137795000, 
     "modifiedBy": "testname", 
     "modifiedDate": 1503137795000}, 
    "charInfo": 
     {"charid": "aaaaaaaaaa", 
     "charDesc": "asdfaadsf asdfasdf asdf", 
     "status": "ON"} 
    }, 
    {"editInfo": 
     {"createdBy": "testname", 
     "createdDate": 1503137795000, 
     "modifiedBy": "testname", 
     "modifiedDate": 1503137795000}, 
    "charInfo": 
     {"charid": "abababab", 
     "charDesc": "abababababab", 
     "status": "ON"} 
    } 
    ]} 

下回ってみました。しかし、イムは、1行のソリューションを探して

答えて

1

あなたのような何かを行うことができます、しかし、それらはちょうど方法にあなたを

  1. ない:getEditInfoまたは:getCreatedDateかもしれたあなたのコードで

    json[:characterList].map! do |character| 
        character.tap do |char| 
        if editInfo = char[:editInfo] 
         if editInfo[:createdDate] 
         editInfo[:createdDate] = 
          DateTime.strptime(editInfo[:createdDate].to_s, '%Q') 
         end 
    
         if editInfo[:modifiedDate] 
         editInfo[:modifiedDate] =_ 
          DateTime.strptime(editInfo[:modifiedDate].to_s, '%Q') 
         end 
        end 
        end 
    end 
    

    主な問題点をここには含まれていませんでした。

  2. strptime
  3. は文字列を受け取り、 *Dateフィールドは整数で strptimeから %s引数は 秒数がある
  4. ある1970-01-01 00:00:00 UTC以来、私は、あなたが年間49602で日付を扱っていないと仮定するつもりです%Qに変更しました。ミリ秒のの番号は1970-01-01 00:00:00 UTCです。

これはDateTimeオブジェクトをJSONハッシュ自体を変更するだけのサンプルである、あなたはそれで別の何かをすることが必要になる場合があり、ここで大きなものはstrptime

DateTime.strptime(1503137795000.to_s, '%Q') # => 2017-08-19T10:16:35+00:00 
%Qto_sです

characterList.each { |char| DateTime.strptime(char.try(:getEditInfo).try(:getCreatedDate).to_s,'%Q') } 
:あなたが仕事をしようとしたそのライン上の他のすべてはあなただけに変更することができれば

あなたのコードと実際に間違っているものを知らなくても、(「動作しませんでしたが、」非常に説明的ではありません)

(1ライナー用)

関連する問題