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 として扱えるようになりました。
わーい。