FreeMarker中的日期时间处理
2015-03-14 00:00
260 查看
摘要: 在FreeMarker中经常会出现输出日期时间的错误,有时会让人摸不着头脑,深入了解它的处理机制后,相信不会再迷茫。
#1. FreeMarker中的日期时间格式设置
FreeMarker中可以分别对date、time、datetime三种类型的日期时间设置格式,例如:
当我们对一个页面变量使用
#2. 什么情况下可以不使用
FreeMarker会将
#3. 变量为
FreeMarker无法自动识别
在查看页面使用
#4. 结论
当变量类型是
#5. 补充
如果上例中的foundDate允许为null时,在页面怎么写才会不报错呢?
已经是很丑陋的写法了吧,但以上写法都是错误的,正确的只能这么写:
#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"))!}
相关文章推荐
- FreeMarker中的日期时间处理
- FreeMarker中的日期时间处理
- .NET 中关于日期时间的格式化处理
- Oracle中日期/时间的处理
- 发现一个很全的java处理时间日期类型的类
- JAVA处理日期(Date)时间(Time)以及相关类的介绍
- 处理时间和日期
- 如何处理DateTime日期时间格式
- JAVA面试题解惑系列(七)――日期和时间的处理
- JAVA处理日期(Date)时间(Time)以及相关类的介绍
- Java中对时间、日期的处理
- Oracle 日期和时间处理函数汇总
- .NET 中关于日期时间的格式化处理
- JDBC中日期/时间的处理技巧
- 如何处理DateTime日期时间格式
- [xpnew收集:]Ms sql日期时间计算处理大全(吐血推荐)!
- 常用的时间日期处理类
- c#.NET 中关于日期时间的格式化处理 (转)
- .NET 中关于日期时间的格式化处理
- java的日期时间处理自定义类