• ベストアンサー

datetime? timestamp?

初心者です。申し訳ありません。 教えて頂けますか? paypal IPN の支払い日時の項目が、 22:21:15 Dec. 20, 2009 PST というフォーマットでした。 これは、datetime でも timestamp でもありませんよね? datetimeに変換する方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 極端な話をしましょう。「22:21:15 Dec. 20, 2009 PST」の直接的な型は文字列です。(もちろん、こんな話ではないことは百も承知です。)  datetimeや、timestamp型の中身を直接見ると、浮動小数点の数値が入っているのが普通です。この数値の意味するところは、とある基準時間を基準として、該当の時刻まで、何日たったかを表示しています。(時分秒は、小数で表します。)(細かいことを言うと、この基準時間は、世界標準時で記録されています。)  普通に、datetime型の欄をselect文等で表示すると、日本語で慣れ親しんだ、日付時刻の文字列で出てきますよね。これは、内部で、日本語形式で日本時間に自動的に変換して表示してくれているからです。  今回は、米語形式で太平洋標準時(PSTとはそういう意味です。)に表記された文字列から、時刻型への代入が問題になっています。  まぁ、日付時刻の表示は、国によって(下手すると、地方によって)ばらばらですから、この変換には、フォーマットをちゃんと指定できるオプションがあるものです。今回の場合は、次のようにします。  STR_TO_DATE('22:21:15 Dec. 20, 2009', '%H:%M:%S %b %d, %Y')  この式で、日付型が得られます。二つ目の引数が日付フォーマットです。各指定子の意味は、リファレンスを参照してください。これを使いこなせば、ほぼどんな形式で日付が書いてあっても日付型に出来るはずです。  今回の問題には、実は、もう一つの問題があります。それは、時間が太平洋標準時(PST)で書かれている事です。そして、ここは、日本ですよね。当然時差があります。よって、データベースに格納する前に、  set time_zone = '-8:00';  で、現在のセッションのタイムゾーンを変更しておく必要があります。でないと、時差の関係で、データがでたらめになってしまいます。  詳細を調べたければ、「タイムゾーン」「日付関数」などの用語で検索してみると良いでしょう。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html
psychesine
質問者

お礼

ありがとうございます!! 大変詳しく回答ありがとうございます。 参考になりました

関連するQ&A