在进行注册用户或者其他操作的时候,由于国家地区等的不同,我们需要填写的日期,我们的写法是yyyy-MM-dd,但是国外的是dd-MM-yyyy,这就存在差别。才存放到数据库的时候可能会出现问题。所有需要进行类型转换。
类型转换的方式有两种,一种是局部的类型转换,一种是全局的类型转化,一下先编写一个时间日期的类型转的工具。
package com.zeroyoung.web.convert;
import org.apache.struts2.util.StrutsTypeConverter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.Date;
/**
*把表单中的MM/dd/yyyy格式的数据转成日期类型
* 把数据库中的本地日期格式,转成MM/dd/yyyy形式输出
* Created by yanglin on 2016/11/2.
*/
//第一步:编写一个类,继承自StrutsTypeConverter,实现convertFromString,convertToString抽象方法
public class DateConvert extends StrutsTypeConverter {
private DateFormat format = new SimpleDateFormat("MM/dd/yyyy");
//把字符串转化为日期类型
public Object convertFromString(Map map, String[] strings, Class aClass) {
if (strings ==null || strings.length==0){
return null;
}
String date = strings[0];
if(aClass==java.util.Date.class){
try {
Date parse = format.parse(date);
System.out.println(parse);
return parse;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
return null;
}
//把日起格式转换成字符串
/**
*
* @param map
* @param o :要转换的数据
* @return
*/
public String convertToString(Map map, Object o) {
if(o instanceof Date){
Date date = (Date)o;
return format.format(date);
}
return null;
}
}
从上面可以看出,我们需要转换一个数据类型需要继承struts2当中的StrutsTypeConverter这个类
而这个类的父类是com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter,DefaultTypeConverter是实现了import com.opensymphony.xwork2.conversion.TypeConverter;TypeConverter当中就一个convertValue()但是有6个参数,DefaultTypeConverter把其实现了之后将参数减少到三个,StrutsTypeConverter把其进一步的简化,然后形成了两个参数的方法。主要是将一个类型转化为String,然后String再转化为原来的类型。
局部类型转换:
在javabean的目录下javabean的名称-conversion.properties
#局部类型转换器文件名的命名规范:javabean的名称-conversion.properties
#局部类型转换器声明,声明方式是以使用的属性名称作为key,以类型转换器的全类名作为value
birthday=com.itheima.web.converter.MyTypeConvertor
全局类型转化:
在src目录下建立一个xwork-conversion.properties
#全局类型转换器文件名的命名规范:xwork-conversion.properties。文件放到类路径的根路径
#全局类型转换器声明,声明方式是以使用的数据类型(全类名)作为key,以类型转换器的全类名作为value
java.util.Date=com.itheima.web.converter.MyTypeConvertor