0

「2011-09-30T11:25:56-05:00」のような石鹸サービスから戻ってきた日時を変換しようとしています。

この形式で解析したい「2011-09-3011:25:56」

ルビーコードに日付文字列をハードコーディングすると、次のように機能します。

def parse_date(datestring)
    formattedDateTime = DateTime.strptime("2011-09-30T11:25:56-05:00", "%Y-%m-%dT%I:%M:%S%z")
    dt = formattedDateTime.strftime("%Y-%m-%d %H:%M:%S")

    return dt
end

この例は、日付文字列をハードコーディングすると機能します。ただし、以下の例は機能しません。使用している日付文字列は「2011-09-30T11:25:56-05:00」です。これは、上記の例でハードコーディングしているものとまったく同じです。

def parse_date(datestring)
    formattedDateTime = DateTime.strptime(datestring, "%Y-%m-%dT%I:%M:%S%z")
    dt = formattedDateTime.strftime("%Y-%m-%d %H:%M:%S")

    return dt
end

このようにして、次のエラーがスローされます。[01:29:06 PM 2011-10-09] SourceAdapterがクエリ例外を発生させました:プライベートメソッド `sub! ' #を求めた

誰かが私に何が起こっているのか教えてもらえますか?

4

2 に答える 2

0

この問題を再現することはできません。このメソッドの呼び出しと定義を取り巻く範囲は何ですか?

詳細情報がなければ、問題が何であるかを判断することはほぼ不可能ですが、以下の推測を参照してください。

$ irb
ruby-1.9.2-p180 :001 > require 'date'
 => true 

ruby-1.9.2-p180 :002 > def parse_date(datestring)
ruby-1.9.2-p180 :003?>   formattedDateTime = DateTime.strptime("2011-09-30T11:25:56-05:00", "%Y-%m-%dT%I:%M:%S%z")
ruby-1.9.2-p180 :004?>   dt = formattedDateTime.strftime("%Y-%m-%d %H:%M:%S")
ruby-1.9.2-p180 :005?>   
ruby-1.9.2-p180 :006 >   return dt
ruby-1.9.2-p180 :007?> end
 => nil 

ruby-1.9.2-p180 :008 > parse_date nil
 => "2011-09-30 11:25:56" 

ruby-1.9.2-p180 :009 > def parse_date(datestring)
ruby-1.9.2-p180 :010?>   formattedDateTime = DateTime.strptime(datestring, "%Y-%m-%dT%I:%M:%S%z")
ruby-1.9.2-p180 :011?>   dt = formattedDateTime.strftime("%Y-%m-%d %H:%M:%S")
ruby-1.9.2-p180 :012?>   
ruby-1.9.2-p180 :013 >   return dt
ruby-1.9.2-p180 :014?> end
 => nil 

ruby-1.9.2-p180 :015 > parse_date "2011-09-30T11:25:56-05:00"
 => "2011-09-30 11:25:56" 

ruby-1.9.2-p180 :016 > 

しかし、私は思い切って推測します。これを試して..

def parse_date (datestring)
  DateTime.parse(datestring).strftime("%Y-%m-%d %H:%M:%S")
end
于 2011-10-09T19:10:53.053 に答える
0

私はその問題を理解しました。解析しようとした日付が実際には文字列ではなかったため、to_sを呼び出す必要がありました。

def parse_date(dateobject)

    tempdatestring = dateobject.to_s

    formattedDateTime = DateTime.strptime(tempdatestring, "%Y-%m-%dT%H:%M:%S%z")
    dt = formattedDateTime.strftime("%Y-%m-%d %H:%M:%S")

    return dt
end
于 2011-10-10T14:33:07.597 に答える