Rubyで文字列を日時に変換する方法

前提

ruby 1.9.2

やりたいこと

  • 文字列を日時に変換(空ならnilにする)
  • しかし、文字列はどのような形式で来るか分からない

方法

  • 標準ライブラリのdateを使う
  • まずDateTime.parse()し、それで処理しきれなければDateTime.strptime()
  • それでだめなら、nil

  require 'date'

  # 文字列を日付に変換
  def custom_parse(str)
    date = nil
    if str && !str.empty? #railsなら、if str.present? を使う
      begin
        date = DateTime.parse(str).to_s
      # parseで処理しきれない場合
      rescue ArgumentError
        formats = ['%Y:%m:%d %H:%M:%S'] # 他の形式が必要になったら、この配列に追加
        formats.each do |format|
          begin
            date = DateTime.strptime(str, format)
            break
          rescue ArgumentError
          end
        end
      end
    end
    return date
  end 

  # str_arrayには様々な形式の文字データが入ってくると仮定
  str_array =  ["2005-06-05T09:47:31+09:00", "2012:06:09 12:23:09"]
  str_array.each do |str|
    date = custom_parse(str)
    puts date                                                                                                                                                                     
  end