这个问题困扰我不是一天两天,看了很多回答,最后得到的都不是我想要的,今天终于解决了。
问题描述:
数据库字段ltime是datetime类型,获取当前系统时间存储在数据库中,数据库中的数据格式为yyyy-mm-dd HH:mm:ss ,并用el表达式显示出来,显示的格式同样为yyyy-mm-dd HH:mm:ss
再此之前需要明白两件事,数据库中日期类型是java.sql.Date,java代码中日期类型为java.util.Date,两者不同,显然涉及到转换的问题。
再者,为了标准化,java.sql.Date类型的数据写进数据库会将时分秒截取,这也是大部分人发现后台数据库时分秒不见的原因。
存储
long now=System.currentTimeMillis();//获取当前系统时间
Date d=new Date(now);
SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " );//设置格式yyyy-MM-dd HH:mm:ss
String str = sdf.format(d);//注意此时是string类型
java.util.Date d1=null;
d1 = sdf.parse(str);//将string类型转化为sql.util.Date的时间
java.sql.Timestamp ts= new java.sql.Timestamp(d1.getTime());//很关键的一步,没有这个时分秒就不见了
ps.setTimestamp(2, ts);//这是为sql语句设置参数,注意用的是setTimestamp()
这时候执行sql插入语句,会发现数据库中时间形式符合想要的结果
取出
在项目中需求是按照格式yyyy-mm-dd HH:mm:ss显示在页面中
按照正常的EL表达式取出数据时,显示结果会多出来**.0**,如图:
修改代码解决尾部多出来.0的问题
导入jstl标签库
<%@page import=“java.util.*” %>
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt”%>
<fmt:formatDate var="a" value="${user.ltime}" pattern="yyyy-MM-dd HH:mm:ss" scope="request"/>
<td><%=request.getAttribute("a") %></td>
终于大功告成!!!!
大部分答案给出来的,将时间变成String类型就结束了,但数据库中将时间类型变成varchar类型才行,虽然这样很简单,但这样就违背了数据库中的数据是datetime类型的初衷了。