格式化TemplateToolkit中输出的时间戳字段

kK-*_*orm 2 postgresql perl catalyst template-toolkit dbix-class

我正在使用Perl和Catalyst框架,DBIx类作为ORM,TT作为视图,Postgresql作为DB.

我有一个带有'timestamp without timezone'类型的列,如果我在Postgres中进行手动查询,则列值是这样的格式2012-08-30 21:30:14,但是当我在TT视图文件中打印该值时,我得到它2012-08-30T15:03:13,所以很明显它会被格式化但是通过我究竟无法分辨的.

我想使用Template :: Plugin :: Date格式化输出时间戳,但我得到Catalyst错误:

无法渲染模板"xxx/list.tt2:日期错误 - 错误的时间/日期字符串:期望'h:m:sd:m:y'得到:'2012-08-30T21:28:22'"

代码在xxx/list.tt2中 [% date.format(xxx.created) %]

那么我该如何让它发挥作用呢?提前致谢.

Ale*_*ier 5

您配置了DBIx :: Class以将'created'列的值扩展为DateTime对象.

请注意,您只需要加载基于InflateColumn :: DateTime的TimeStamp组件,而不是两者都加载!

此外,您应该添加on_connect_call => 'datetime_setup'到您的DBIx :: Class,connect_info以使DBIC设置数据库日期时间格式以匹配它对DateTime对象通胀的期望.这对每个受支持的数据库都是正确的,因此如果您切换数据库或使用SQLite进行测试,它也会起作用.

Template :: Plugin :: Date不用于处理DateTime对象,Template :: Plugin :: DateTime是.

关于模板渲染,我建议你使用Catalyst :: View :: TT#expose_methods功能,在Catalyst :: View :: TT视图中添加一个方法,该方法传递一个DateTime对象并返回一个格式化的字符串.您可以为不同的格式添加多种方法,例如日期+时间,仅限日期等.这样您就有了一个中心位置,它定义了DateTime格式,可以根据需要轻松更改.