string转date的方法
freemarker类型转换与if判断,字符串转数字,数字转字符串,布尔
值转换为字符串,字。。。
⼀、前⾔
freemarker中也是根据类型进⾏判断的,先看下如下的判断:
<#if classify?? && classify.id == 1>
·相等
</#if>
classify是⼀个对象,其中的id是Long类型,在页⾯上被转成了string,运⾏会报如下的错误:
[11:02:48,694][ERROR] freemarker.runtime:60 - Error executing FreeMarker template
FreeMarker template error:
Can't compare values of these types. Allowed comparisons are between two numbers, two strings, two dates, or two booleans.
Left hand operand is a string (wrapper: f.t.SimpleScalar).
Right hand operand is a number (wrapper: f.t.SimpleNumber).
The blamed expression:
==> classify.id == 1  [in template "modules/front/classify/classify.html" at line 87, column 74]
错误信息提⽰if左侧是⼀个字符串,右侧是⼀个数值型的,所以不通过,这个时候就需要类型转换,如下⽅式即可通过:
<#if classify?? && classify.id?number == 1>
·相等
</#if>
⼆、类型转换
⼀些常见的转换⽅式如下:
2.1、字符串转化为数字
${'300.001'?number} 结果为:300
如果⽤if进⾏判断的话,如下⽅式结果为不相等
<#if '300.001'?number == 300>
相等
<#else>
不相等
</#if>
右边和左边⼀样才相等
<#if '300.001'?number == 300.001>
相等
</#if>
2.2、数字转化为字符串
有以下两种⽅式,使⽤?c和?string进⾏转换
${300.001?c} 结果为:300.001
string(format)
format:数字格式
<${300.001?string("number")} 输出:300.001
<#if 300.001?string("number") == "300.001">
相等
<#else>
不相等
</#if>
freemarker⾃带了三种格式:number(数值),currency(货币)和percent(百分⽐) ,有以下两种写法
${30?string("number")} 结果为:¥30
${30?string("curreny")} 结果为:¥30
${30?string("percent")} 结果为:3,000%
${30? string .number}  结果为:¥30
${30? string .currency} 结果为:¥30
${30? string .percent} 结果为:3,000%
2.3、布尔值转换为字符串
true转为"yes",false转换为"no"
${true?string("yes","no")}
如果布尔值是true,那么返回"yes",否则返回"no",注意,左侧必须是布尔型才⾏,否则会报错。
2.4、字符串和⽇期转换
以下为了简单,全部使⽤了字符串进⾏转换,理论上后台应该是Date类型,然后在页⾯上使⽤以下⽅式进⾏转换:2.4.1、字符串转 date
${"2021-04-28 11:31:56"?date("yyyy-MM-dd")}
输出为:2021-04-28
2.4.2、字符串转 time
如果是字符串的话,使⽤time,格式如下这种,运⾏会报错:${"2021-04-28 11:31:56"?time("HH:mm:ss")}
左侧的字符串格式只能是HH:mm:ss才能进⾏转,左侧是${"11:31:56"?time("HH:mm:ss")}
2.4.3、字符串转 datetime
${"2021-04-28 11:31:56"?datetime("yyy-MM-dd HH:mm:ss")}
使⽤string也能进⾏转换,createTime要是Date类型:${createTime?string('yyyy-MM-dd HH:mm:ss')}