我使用Perl与催化剂骨架,DBIx类作为ORM,TT的意见和PostgreSQL为DB。
我有一个“时间戳没有时区”类型的列,如果我在Postgres的做手工查询的列值在这样的格式2012-08-30 21:30:14
,但是当我在TT视图文件打印的价值,我得到像这样2012-08-30T15:03:13
,所以很明显它被格式化但究竟是什么我不知道。
我想用模板::插件::日期格式化输出时间戳,但我得到的催化剂错误:
无法呈现模板 “XXX / list.tt2:日期错误 - 坏的时间/日期字符串:预计 'H:M:SD:M:Y' 了: '2012-08-30T21:28:22'”
在XXX / list.tt2代码[% date.format(xxx.created) %]
所以我怎么做工作? 提前致谢。
您配置DBIx ::类的“创造”列的值充气到的DateTime对象。
请注意,您只需要加载了基于InflateColumn ::日期时间,而不是两个时间戳组件!
此外,您还应该增加on_connect_call => 'datetime_setup'
您DBIx ::类connect_info
使DBIC设置数据库日期时间格式匹配的内容,预计为DateTime对象通货膨胀。 这确实为每个支持的数据库正确的事情,所以它也将如果切换数据库或工作使用SQLite进行测试。
模板::插件::日期不处理datetime对象, 模板::插件::日期时间是。
关于模板渲染我建议你使用催化剂::阅读:: TT#expose_methods功能,通过添加一个方法到您的催化剂::它被传递一个DateTime对象,并返回一个格式化字符串查看:: TT视图。 您可以添加多个方法不同的格式,例如日期+时间,日期等,只有这样,你有一个中央位置定义的日期时间格式,其在需要时可以很容易地改变。
这一个应该工作:
[% date.format(xxx.created.strftime('%Y-%m-%d %H:%M:%S')) %]
不要使用模板的无线工具包的日期::格式的功能,它不能很好地工作。 幸运的你DBIx :: Class对象可直接调用的strftime。
要解决您的代码示例:
[%xxx.created.strftime( '%Y-%间 - %d%R:%S')%]
对于其它格式读取的strftime联机帮助页。
如果你需要重复重新格式化您可能需要使用宏是这样的:
[%MACRO disp_dt(DT)BLOCK; dt.strftime( '%Y:%B%d'); 结束 %]
[%disp_dt(xxx.created)%]
由于MST帮助我这个在IRC上。
date.format(xxx.created.replace('T', ' '));