freemaker String类型的时间戳转日期

来源:互联网 发布:网络监控手机客户端 编辑:程序博客网 时间:2024/05/16 02:51

用过freemaker的同志可能都遇到过这个问题,但不一定知道原因。毕竟都是踩过坑的人,还是要分享点干货出来避免大家掉一个坑里大笑

一、问题如何出现?

这是在接通微信公众号向粉丝推送消息时出现的问题。微信有多少坑我就不一一细说了。(ps:并没有黑我大腾讯安静)。

通过获取successToken,然后用successToken获取粉丝信息。返回值中有一个字段:

subscribe_time,这个是mysql表字段中的命名,我为了方便解析直接用了varchar类型,实体类为String。(并没有考虑到需要将字段使用freemaker显示到页面尴尬)。然后用普通的方式渲染数据。结果异常开始。

解决方案:

一、${*****?string("yyyy-MM-dd HH:mm:ss")}

这种类型只能用在处理"2017-08-20 20:19:01",是整个String类型。

结果:

freemaker抛出异常。。

二、${**.**?date};${**.**?datetime}

结果还是一样。。。怎么办,我们来分析原因:

首先 String str="1501640352",他是时间戳类型,我尝试先将其转换为long类型:

<#assign dlong = u.subscribe_time?number/>

${u.subscribe_time?number_to_datetime!}

如果看不懂assign的同学请自行百度。

打印出来看下这样:

这次没有抛出异常,但结果是1970····

这样就有点尴尬了。。。把时间戳拿去站长工具里面转换又是2017····

再细想一下,如果是unix生成的时间戳是精确到秒级的,而java是精确到毫秒级的,如果我将时间戳转为long再*1000是否有效?实验:

 <#assign dlong = u.subscribe_time?number * 1000 />

${dlong?number_to_datetime}

结果:

2017····

大功告成!

其实freemaker很强大的,可以在.java文件里定义方法然后通过配置文件调用。必要时可以配置一下调用后台的方法大笑


阅读全文
1 0
原创粉丝点击