はちゅにっき

こっちのブログはまったり更新

Postgres の時間を DBIC 経由で DateTime に変換する

PostgreSQL のテーブルに入っているタイムスタンプ情報を、何も意識せずに Perl の DateTime 型として扱えるようになるという、魔法のような呪文。
が、CPAN に載ってました。
http://search.cpan.org/~ash/DBIx-Class-0.08010/lib/DBIx/Class/InflateColumn.pm

__PACKAGE__->inflate_column('column_name', {
    inflate => sub { DateTime::Format::Pg->parse_datetime(shift); },
    deflate => sub { DateTime::Format::Pg->format_datetime(shift); },
});

というわけで、前回生成したスキーマにも書き込んでみよう。

# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-01-15 17:35:01
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:1H30JgRK2EaxbXyC+03S+A
# ↑とにかくこんなコメントが一番下のほうにかいてある
# ↓ので、こっからかいた
use DateTime::Format::Pg;

__PACKAGE__->inflate_column('カラム名', {
    inflate => sub { DateTime::Format::Pg->parse_datetime(shift);  },
    deflate => sub { DateTime::Format::Pg->format_datetime(shift); },
});
# You can replace this text with custom content, and it will be preserved on regeneration
1;


おわり。
これで何も気にせずに DateTime として扱えるようになりました。
わーい。