2010-11-05 電話にでんわ!
Time::Piece::MySQL とタイムゾーン (訂正あり)
重要
id:holidays-l さんがこの記事の誤りと、ちゃんとした解説を書いてくれているので、そっちを参照して下さいませ。
以下、そのつもりで読んで下さい。
MySQL から UNIX_TIMESTAMP() と NOW() の値をこんな感じで出します。
[12:13:13 root@bopobo/test :4] SELECT UNIX_TIMESTAMP(), NOW(); +------------------+---------------------+ | UNIX_TIMESTAMP() | NOW() | +------------------+---------------------+ | 1288926767 | 2010-11-05 12:12:47 | +------------------+---------------------+ 1 row in set (0.00 sec)
最近 Time::Piece を使っているので、MySQL の datetime 型を扱う際には Time::Piece::MySQL を使ってこんな感じにします。
$ perl -MTime::Piece -MTime::Piece::MySQL -e 'my $t = Time::Piece->from_mysql_datetime("2010-11-05 12:12:47"); warn $t;'
Fri Nov 5 12:12:47 2010 at -e line 1.
これは正しいんですけど、
$ perl -MTime::Piece -MTime::Piece::MySQL -e 'my $t = Time::Piece->from_mysql_datetime("2010-11-05 12:12:47"); warn $t->epoch;'
1288959167 at -e line 1.
は元の timestamp と異なる値 (gmtime) になっちゃうと。これは $ENV{TZ} を変更しても全然変わらない。
$ perl -MTime::Piece -MTime::Piece::MySQL -e 'my $t = Time::Piece->from_mysql_datetime("2010-11-05 12:12:47"); warn $t->epoch - 9 * 60 * 60;'
1288926767 at -e line 1.
なら正しいけどかっこわるい。
$ perl -MTime::Piece -MTime::Piece::MySQL -e 'my $t = Time::Piece->from_mysql_datetime("2010-11-05 12:12:47"); warn $t->strftime("%s")'
1288926767 at -e line 1.
これなら正しいみたい。詳しくは man strftime すれば分かります。
余談ですが DateTime::Format::MySQL だと、
$ perl -MDateTime::Format::MySQL -e 'my $dt = DateTime::Format::MySQL->parse_datetime("2010-11-05 12:12:47"); warn $dt->set_time_zone("Asia/Tokyo")->epoch'
1288926767 at -e line 1.
とかで書けます。
クリック: 17回
トラックバック - http://d.hatena.ne.jp/ZIGOROu/20101105/1288927369
リンク元
- 59 http://d.hatena.ne.jp/holidays-l/20101106/p1
- 44 http://reader.livedoor.com/reader/
- 36 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331098752210&ved=0CC8QFjAB&url=http://d.hatena.ne.jp/ZIGOROu/20101105/1288927369&ei=ePRWT9TcMYb3mAXJoeX_CQ&usg=AFQjCNF6rxuQTbl4DU-ywVn4CkWv_IZqdw
- 23 http://twitter.com/
- 22 https://www.google.co.jp/
- 18 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCcQFjAA&url=http://d.hatena.ne.jp/ZIGOROu/20101105/1288927369&ei=Z3kzT6nhE8yqsAK_v-2qAg&usg=AFQjCNF6rxuQTbl4DU-ywVn4CkWv_IZqdw&sig2=00SbmZAsRYTFPzbl9Hxqhw
- 18 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CEIQFjAC&url=http://d.hatena.ne.jp/ZIGOROu/20101105/1288927369&ei=nBCWT9SMKJGHmQWEvcGxDg&usg=AFQjCNF6rxuQTbl4DU-ywVn4CkWv_IZqdw&sig2=bVy6EEsAssas_pD2w4MCcQ
- 14 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=time::piece::mysql
- 14 http://www.google.com/reader/view/
- 13 http://www.google.co.jp/url?sa=t&rct=j&q=time::piece::mysql&source=web&cd=2&ved=0CC8QFjAB&url=http://d.hatena.ne.jp/ZIGOROu/20101105/1288927369&ei=MsagTtGWF-yviQf7sp38CQ&usg=AFQjCNF6rxuQTbl4DU-ywVn4CkWv_IZqdw&sig2=HQwIMOq7BogqpyuxbnMfI


