博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FreeMarker中的日期时间处理
阅读量:6113 次
发布时间:2019-06-21

本文共 1360 字,大约阅读时间需要 4 分钟。

  hot3.png

#1. FreeMarker中的日期时间格式设置 FreeMarker中可以分别对date、time、datetime三种类型的日期时间设置格式,例如:

config.setDateTimeFormat("yyyy-MM-dd HH:mm:ss");  config.setDateFormat("yyyy-MM-dd");  config.setTimeFormat("HH:mm:ss");

当我们对一个页面变量使用 ?date ?time ?datetime 时就会分别按以上设置的对应格式显示。

#2. 什么情况下可以不使用 ?date ?time ?datetime FreeMarker会将 java.sql.Date java.sql.Time java.sql.Timestamp 类型的变量自动识别为 date time datetime。所以当变量是以上三种类型时,FreeMarker会自动匹配设置的格式,不需要在变量的后面加上?date ?time ?datetime

#3. 变量为 java.util.Date 类型时的困惑 FreeMarker无法自动识别 java.util.Date 类型应该显示哪种格式,这时需要明确的指定其要显示的格式,否则FreeMarker将会抛出异常。但有些时候我们发现 java.util.Date 类型的变量没有指定格式在页面也能正确显示,这是什么情况?例如:

@Entity@Table(name = "Tmp_Company")public class Company extends UuidEntity {    ...    /** 成立日期 */    @Temporal(TemporalType.DATE)    private java.util.Date foundDate;    ...}

在查看页面使用${company.foundDate} 时,没有指定格式却能够正确显示。这是因为@Temporal(TemporalType.DATE) 注解让ORM框架在从数据库中取出数据后将 java.util.Date 类型自动转换成了 java.sql.Date 类型,这时FreeMarker会自动识别其格式。假如在这个业务实体类上加上@Cache 注解,分别使用不同的缓存策略,还会出现更有意思的现象,这里就不展开说了。

#4. 结论 当变量类型是 java.sql.Date java.sql.Time java.sql.Timestamp 时,可以不用指定格式;当变量类型是 java.util.Date 时,指定格式才是最稳妥的办法。

#5. 补充 如果上例中的foundDate允许为null时,在页面怎么写才会不报错呢?

${foundDate?date!}  ${(foundDate?date)!}  ${foundDate!?date}  ${(foundDate!)?date}

已经是很丑陋的写法了吧,但以上写法都是错误的,正确的只能这么写:

${(foundDate?string("yyyy-MM-dd"))!}

转载于:https://my.oschina.net/jnoee/blog/387105

你可能感兴趣的文章
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
JS数据结构学习:队列
查看>>
浙江信访,从统一到智能的互联网转型之路
查看>>
对是否要用Linux的思考
查看>>
「每日一瞥
查看>>
【随笔】工程师都是性情中人
查看>>
[译] React v16.8: 含有Hooks的版本
查看>>
“寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
查看>>
现代 JavaScript 函数库 usuallyjs 的安装和使用
查看>>
Leaflet-Develop-Guide
查看>>
Android Studio 导入 AOSP 源码
查看>>
React16时代,该用什么姿势写 React ?
查看>>
小程序上传图片到七牛云(支持多张上传,预览,删除)
查看>>
3分钟学会如何调度运营海量Redis系统
查看>>
浅析MySQL事务中的redo与undo
查看>>
iOS开发助手、ipa便捷上传工具!
查看>>
一文了解腾讯云数据库SaaS服务
查看>>
再见,BLE的那些坑!
查看>>