在用JavaEE中SSH框架技术开发的OA项目中,如果在项目中有会议信息的功能,而且在数据表的设计中,会议时间那列的数据类型是DATETIME类型而不是VARCHAR类型。那么在系统中时间转换是个“头痛”的问题,因为在系统中获取的时间是String类型,而数据表中的DATETIME类型。两者类型不一致,会报异常。所以在页面获取到时间后,就要进行有效的转换。
一般来说,会议时间我们需要的是日期+小时+分钟,即是哪天的什么时候,类似于2010-09-08 08:30这样的形式。时间要精确到分钟,这样不会出太大的差错,毕竟现在是高效率的社会。在OA系统中,当经理(系统的管理员)发布一条会议信息,也就是向数据库保存一条记录的过程。在Struts 1.x中,我们用Form来封装用户输入的数据,然后由Action拦截,经过处理后调用业务逻辑层中的方法保存到数据库中。在Action中,我们应该如何处理String类型向DATETIME类型的转换呢?
首先,我们从Form中分别取出封装的时间数据,然后合并成类似于2010-09-08 08:30这种形式的格式,在此时我们把合并后的变量名取为dataStart。但此时它是String类型,直接封装在实体类中会报错。在此我们用Java提供的SimpleDateFormat 类定义一个时间格式,代码如下:SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd hh:mm");,此时也new出了SimpleDateFormat的一个对象。这样,我们就可以调用对象的parse(String obj)的方法来转换了,转换后的数据类型是Date,封装后保存到数据库中就不会出错了。parse()方法需要一个String类型的参数,我们就把刚才时间合并后的变量dataStart传递过去即可。我们就定义一个Date类型的变量startTime,来接收转换后的值。代码如下:Date startTime = fm.parse(dateStart);。
在转换的过程中,会报一个ParseException的转换异常。如果不用try…catch...捕获异常,那就要用throws关键字把异常抛出去即可。当然,也许你会问,在Action中时间经过转换是Date类型,而在数据表中设计的是DATETIME类型。两者也不是一致的数据类型,怎么保存啊?呵呵……,在此说明你在时间类型的转换已经看懂了许多了。其实你的担心是多余的,因为数据库有会根据Date类型的数据自动转换成DATETIME类型的数据后再保存的。当然,我在此说的是在SQL Server 2005的数据库中的,其它诸如:Oracle、MySQL等数据库是不是与SQL Server 2005的一样,暂时我还没有太多的学习。
有关的方法转换截图如下: