- Introduction
- Quick Start
- Design
- Tutorial
- Spring MVC
- JSP/JSTL/Servlet
- JQuery and plugins
- Ajax
- Twitter Bootstrap CSS
- SiteMesh
- YUICompressor
- Spring Restful Service
- JAX-WS/CXF
- Spring Data JPA
- JPA/Hibernate
- MyBatis
- Database
- H2 Database
- Datasource
- Transaction
- Redis
- Cache Overview
- Guava Cache
- Ehcache
- Memcached
- Shiro Security
- Crypto
- Schedule/Quartz
- Jmx
- System Protection
- Hystrix
- Rate Limiter
- Monitoring and Metrics
- Metrics-library
- Graphite
- Logging/Slf4j/Logback
- Logstash
- Spring
- Validation Overview
- JQuery Validation
- Hibernate Validator
- General Utilizes
- JSON/JAXB
- Date
- Test Overview
- Unit Test/Mockito/AssertJ
- Selenium2
- BDD
- Performace-test
- JMeter
- Profiler
- Simulator Overview
- Nodejs
- Eclipse
- Maven
- Sonar
- git
- Travis CI
- Jetty
- Micro-Service Architecture/Executable War
- AssertJ
- CreateNewProject
- Dozer
- Graphite-Windows
- Hello-Everybody
- Jaxb
- Json
- Mock
Date
1. Joda Time
Joda Time 在很久以前就被认为应该直接收入JDK,因为它吸取了JDK里Date的大量失败教训,如对象应该是不可改的,对字符串与Date类型的转换,时区/Locale的支持,各种日期计算的简便函数等等都不错。
1.1 Joda演示
Joda Time的详细使用见Showcase中的JodaDemo。
1.2 Joda在各种环境中的使用
1.2.1 在Hibernate中使用DateTime类型
在quickstart的User对象中的registerDate属性就直接使用了Joda Time类型。Hibernate4.0需要引入UserType项目。在属性上做出如下标注
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getRegisterDate()
class名有点长,后来又引入了一个Hibernates.DATETIME_TYPE变量.
userType中还有其他类型,比如专门对应java.sql.Date与java.sql.Time的. 在JDK 1.6里,会显示一条”Under JDK 6 it may not be possible to handle DST transitions correctly wiki it“的信息,忽略它。
1.2.2 在JSP中显示DateTime类型
在quickstart的管理员管理用户时演示。需要引入joda-jsptags,不能再用\。
演示格式可以直接用pattern(如yyyy-MM-dd)设定,也可以设置style和locale,在Showcase的JodaDemo中都有演示。quickstart中用了style风格
<%@ taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %>
<joda:format value="${user.registerDate}" style="LL" locale="zh"/>
1.2.3 Jackson中的转换
Jackson有个jackson-datatype-joda的子项目,但只能转换成Timestamp,不能像Date那样在属性中定义日期格式,非常遗憾。
2. 关于时间的测试
如果代码中需要当前时间的时候,直接使用dateTime= new DateTime()这样的语法,对测试的assert语句编写及超时判断,时间间隔计算等等都很不方便。像SPring Data JPA就封装了一个DateTimeProvider的抽象,默认提供直接使用系统时间,测试时可以自由控制。既然他已经写好了,SpringSide就直接使用,在springside-test中封装了一个MockDateTimeProvider.
在Quickstart的AccountService及AccountServiceTest对registerDate的处理,演示了这种DateTimeProvider的使用。
3. 各种数据库的时间存储。
3.1 H2
支持TimeStamp类型,以UTC存储数据,比如如下语句插入的sql, 在界面上显示的时间将是早上9点
insert into SS_USER (ID, REGISTER_DATE) values(1,'2012-06-04 01:00:00');
3.2 MySQL
MySQL的TimeStamp有个毛病,一旦设置不对,就会帮你时时把值更新到当前日期。安全的设置语句如下
ISSUED_TIME TIMESTAMP DEFAULT 0,
4. date in JSP
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate value="${user.registerDate}" pattern="yyyy年MM月dd日 HH时mm分ss秒" />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论