続・すみっこの記

富山生まれ下請けIT育ちのフリーライターが布団の中からお送りします

DATETIME型カラムの値をRFC822フォーマットで表示する

「2014-12-10 12:30:00」のようなDATETIME型の情報を「Wed, 10 Dec 2014 03:30:00 GMT」のようなRFC822で定められたフォーマットで表示する必要があったのでメモ。

SQL

SELECT文はこんな感じ。GMTグリニッジ標準時なので日本時間からは9時間引かなきゃならない。

SELECT
    UNIX_TIMESTAMP(DATE_SUB('2014-12-10 12:30:00', INTERVAL 9 HOUR)) AS pubSec,
    DATE_FORMAT(DATE_SUB('2014-12-10 12:30:00', INTERVAL 9 HOUR), '%Y') AS pubYear

Perl

SQL文で取得しておいたUNIX時間(1970/01/01 00:00:00からの経過秒数)と4桁の年を使って日付を作成する。

my @weekly = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
my @monthly = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
my ($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime(${pubSec});
${pubDate} = sprintf('%s, %d %s %04d %02d:%02d:%02d GMT', $weekly[$wday], $mday, $monthly[$month], ${pubYear}, $hour, $min, $sec);

意外と面倒くさかったです。

参考ページ

fizzbuzz blog : MySQLのdatetime型をUNIX TIMEへ変換、UNIX TIMEをdatetime型へ変換する関数

English:英語で曜日と月の省略表記(3文字) | raining

時間の処理(time/localtime)-ミスティーネットPerl・CGI講座-

 

プログラミングPerl〈VOLUME1〉

プログラミングPerl〈VOLUME1〉

 
初めてのSQL

初めてのSQL

 
track feed すみっこの記