struts中日期转换的问题

最近几个月都在忙项目..由于公司人手不多..开发也才几个!从需求到开发全部都得一手包办!!趁有时间总结下最近觉得有用的东西...可能会分几篇文章来写:这里先谈下日期的问题!
一般我们做项目总是会遇到时间的操作.例如账户登录时间.日志记录时间.等等
而如果我们存放到数据库中是Date类型的数据(因为这是比较完整的时间数据).我们显示给客户看到时间一般会进行处理.应该有些显示没有必要精确到秒之类的.还有添加数据使用到一些时间控件的时候读取到底数据也将是字符串形式了.这时候我们必须在后台进行字符串到Date的转换..一般我们会编写一个转换时间的类如:

package com.changtu.publicplatform;

import java.text.SimpleDateFormat;
import java.util.Date;

// 日期帮助类
public class DateUtil {

/**
* 将java.util.Date 转换 yyyy-MM-dd 格式的字符串
* @param date: java.util.Date
* @return
*/
public static String dateToStr(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
}
/**
* 字符串转日期
* @param str 格式: 2009-08
* @return
*/
public static Date strToDate(String str) {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
try {
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}

}


而每次都需要进行这个工具类方法的调用转换...操作多了好像非常繁琐.修改时候也麻烦

这时候便想到struts1.2应该会有支持这中日期转换的吧!上网查了下资料.发现Converter将可以帮助到我们.
但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。

对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。

ConvertUtils.register(new DateConvert(), java.util.Date.class);
register(Converter converter, java.lang.Class clazz)
为指定类型clazz注册转换器converter。如果clazz已经存在一个对应的转换器,那么converter,将覆盖原来的转换器。也就是说,我们可以为String,Double创建自定义的类型转换器,并在注册后进行使用。
这时候我们可以创建自己的转换器:UtilDateConverter

public class UtilDateConverter implements Converter {

private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//这里可以进行扩展

public Object convert(Class type, Object value) {
if (value == null) {
return value;
}
if (value instanceof Date) {
return value;
}
if (value instanceof String) {
try {
return format.parse((String)value);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}

}

然后进行注册UtilDateConverterInitServlet

public class UtilDateConverterInitServlet extends HttpServlet {

@Override
public void init() throws ServletException {
ConvertUtils.register(new UtilDateConverter(), Date.class);
}

}

最后在web.xml进行配置.

<servlet>
<servlet-name>utilDateConverter</servlet-name>
<servlet-class>com.changtu.serviceplatform.web.UtilDateConverterInitServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>

就将生效.可以在ActionForm中直接使用Date类型.在页面中符合你转换器格式的字符串在使用ActionForm调用时候将自己转换为Date的类型(在web项目中,如果没有注册日期的话,formbean中将不支持java.util.Date类型,并抛出异常。)
上面注册器只是将页面字符串转换为Date而在显示页面的时候将要使用日期用字符串形式显示的时候就可以使用jstl标签提供转换:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate value="${logForm.createDate }" pattern="yyyy-MM-dd" />

也有简便的注册多个格式日期的方法:

DateConverter d = new DateConverter();
String[] datePattern = { "yyyy-mm-dd", "yyyy/mm/dd", "yyyy.mm.dd" };
d.setPatterns(datePattern);
ConvertUtils.register(d, java.util.Date.class);

ConvertUtils简单使用可以看下
http://www.itepub.net/html/kaifajingcui/Java/2006/0514/31616.html

下一篇文章将讨论下pager-taglib这个分页框架的使用和其一些问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值