Hatena::ブログ(Diary)

CLの日記

2008-02-19 MySQL最近使ってない

SQLiteのTIMESTAMP型のフィールド値をPerlのDateTimeモジュールで日本時間に変換

ログ格納をSQLiteでやろうとするとctimeをTIMESTAMP型にして勝手に格納されるようにすると便利なんですけれどもこれはMySQLのTIMESTAMPと同じ書式で格納されて、当然ながらタイムゾーンUTCになっています。

つうわけで、これを日本時間にして取り扱う戦略としては、DateTime::Format::MySQLを使うといいなーていうのが1点目。

次に、DateTime::Formatでは、生成したオブジェクトタイムゾーン指定しないと、勝手に'UTC'になるなんてことはなく、曖昧なままのよう。だから、一度明示的に $dt->set_time_zone ( 'UTC' ); でタイムゾーンUTCに指定してあげないと、時刻を正確に示しているオブジェクトにはならないっていう点が2点目。

use DateTime::Format::MySQL;
my $timestamp = '2008-02-19 12:00:00';
my $dt = DateTime::Format::MySQL
           ->parse_datetime( $timestamp )
           ->set_time_zone( 'UTC' );
print $dt->set_time_zone('local')
         ->strftime('%m/%d %H:%M');

実行結果:

02/19 21:00

DateTime::Format::MySQL - Parse and format MySQL dates and times - search.cpan.org

狐の王国 PerlのDateTimeモジュールでset_time_zoneすると9時間ずれる件

を参考にしました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/C_L/20080219/1203390977