FreeMarker如何比较日期

更新时间:2023-07-01 12:08:21 阅读: 评论:0

FreeMarker如何⽐较⽇期
找好项目代码
先来看⼀种正确的写法,然后逐个分析代码:
<#assign publishDt="2018-10-19">
<div <#if (ateDt?date lt publishDt?date('yyyy-MM-dd'))></#if>>
</div>
这段代码的意思是:
如果创建时间⼩于发布时间,隐藏这个div内容。
代码分析
assignretained
是freemarker的指令,可以⽤来在页⾯上创建⼀个变量,代码第⼀⾏使⽤这个指令创建了⼀个⽇期字符串publshDt。
交通安全宣传日
if
空气悬架系统是条件指令。
date
是⼀个⽇期内建函数。
⽤来指定⽇期变量中的哪些部分被使⽤,包括date,总共三种:
date:仅⽇期部分,没有⼀天当中的时间部分。
time:仅⼀天当中的时间部分,没有⽇期部分。
datetime:⽇期和时间都在
如果 ? 左边是字符串,那么date就是字符串的⽇期转换函数,⽤来将 。
右边的publishDt?date('yyyy-MM-dd')写法就是这种情况
publishDt是⽤assign指令定义的字符串变量,publishDt?date('yyyy-MM-dd')中的date是字符串内建函数date,⽤于将字符串格式的⽇期转为⽇期类型。
⼩结:
虽然字⾯都是叫date,但是⼀个是⽇期函数,⼀个是字符串转⽇期的函数。
个⼈觉得这个设计还是⽐较坑的,开发者容易混淆,可以完全使⽤带前缀的名字区分嘛。
进⼀步分析
不能。
由于createDt是⼀个java.util.Date类型,所以你不能这么写:
因为这⾥的date是⽇期函数,⽤来告诉freemarker取⽇期的哪个部分(⽇期、时间、⽇期时间)。
虽然freemarker知道create Dt是⼀个java,util.Date类型,但是freemarker不知道这个类型是freemarker要的哪⼀种(⽇期、时间、⽇期时间),所以还是需要通过⽇期函数指定,否则会报错说,左边的是⼀个未知的⽇期类型,需要指定date、time、date-time中的⼀种:
跳绳日记
lt
是⽐较运算
延伸1:⽇期如何转指定格式字符串
延伸2:开头代码的另⼀种写法:
<#assign publishDt="2018-10-19"?date>
<div <#if (ateDt?date lt publishDt)></#if>>
</div>
在使⽤assgin定义的时候,使⽤使⽤字符串转⽇期的函数date将publishDt转为⽇期类型。
⽐较的时候不需要写成ateDt?date gt publishDt?date('yyyy-MM-dd')。
但是注意不能这样写:
<#assign publishDt="2018/10/19"?date>
否则会报错:
freemarker需要的格式是yyyy-MM-dd。
延伸3:More @ Activiti Workflow
这篇⽂章的由来,源于⼀个线上的bug,为了解决Activiti Workflow流程兼容的问题,在前端控制,⽼流程不⾛流程节点X。
⼯作流,⼀旦发起流程,流程定义信息都已经确定,新加流程节点并发布后,⽼流程是⽆法跑到新流
营销环境
程节点的,因为流程节点已经在运⾏的流程中确定,所以对于⽼流程,页⾯⽆须暴露新节点的⼊⼝。
进⼀步思考:
freemarker的date函数和字符串date函数,还是⽐较坑的,开发⼈员需要对其熟悉才能⽤好,否则会花费你额外的时间debug。
电脑快捷键锁屏⽬前想到的绕过这个坑的⽅法是,将⽐较的值在后台处理,返回给前台。邪恶女儿国
后台处理也有问题,兼容的逻辑耦合在代码⾥不够优雅,如果能够把兼容的标识,以时间或者版本存到某张表中,然后暴露⼀个接⼝

本文发布于:2023-07-01 12:08:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1063102.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:流程   时间   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图