-->

格式化时间戳字段中TemplateToolkit输出(Formatting timestamp fi

2019-08-08 03:58发布

我使用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) %]

所以我怎么做工作? 提前致谢。

Answer 1:

您配置DBIx ::类的“创造”列的值充气到的DateTime对象。

请注意,您只需要加载了基于InflateColumn ::日期时间,而不是两个时间戳组件!

此外,您还应该增加on_connect_call => 'datetime_setup'您DBIx ::类connect_info使DBIC设置数据库日期时间格式匹配的内容,预计为DateTime对象通货膨胀。 这确实为每个支持的数据库正确的事情,所以它也将如果切换数据库或工作使用SQLite进行测试。

模板::插件::日期不处理datetime对象, 模板::插件::日期时间是。

关于模板渲染我建议你使用催化剂::阅读:: TT#expose_methods功能,通过添加一个方法到您的催化剂::它被传递一个DateTime对象,并返回一个格式化字符串查看:: TT视图。 您可以添加多个方法不同的格式,例如日期+时间,日期等,只有这样,你有一个中央位置定义的日期时间格式,其在需要时可以很容易地改变。



Answer 2:

这一个应该工作:

[% date.format(xxx.created.strftime('%Y-%m-%d %H:%M:%S')) %]


Answer 3:

不要使用模板的无线工具包的日期::格式的功能,它不能很好地工作。 幸运的你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上。



Answer 4:

date.format(xxx.created.replace('T', ' '));


文章来源: Formatting timestamp field for output in TemplateToolkit