Rails 2.0 のXMLとHTMLでの時刻の取り扱い方
htmlでPOST(PUT)したときと、xmlでPOST(PUT)したときでは時刻の扱いが異なる。
HTMLはそのまま受け取ってしまうようだが、XMLで受け取るとUTCに変換するようだ。
プログラムのつくりではそのままMySQLのdatetimeに突っ込むのだが、MySQLにはTimezoneという考えがないようだ。するとそのまま作ると、HTMLでPOSTするとローカル時間、xmlでPOSTするとUTC時間となる。
それを呼び出すときはその区別がないので、MySQLにTimezoneのカラムを用意してプログラムで扱うか、どちらかに時間を合わせなければいけない。
いろいろ考えて、ローカル時間に合わせるとする(海外進出を考えるならばTimezoneを考慮しないといけないが)。
以下のようなプログラムをupdateのところにつけた時刻補正した。
case request.format when Mime::XML, Mime::ATOM params[:plan]['start_datetime'] = params[:plan]['start_datetime'].to_time.getlocal.to_s params[:plan]['end_datetime'] = params[:plan]['end_datetime'].to_time.getlocal.to_s else @plan.start_datetime = DateTime.parse("#{params[:start_date]} #{params[:start_time]}") if params[:start_date] or params[:start_time] @plan.end_datetime = DateTime.parse("#{params[:end_date]} #{params[:end_time]}") if params[:end_date] or params[:end_time] end