mysql异常(一)日期后面多了个 .0 的解决办法
mysql异常(一)日期后面多了个 .0 的解决办法
2018年04月10日 22:00:35 王20133 阅读数:5368
从数据库读出来的日期后面为什么多了个 .0,这是因为你数据库的该字段设置为 timestamp 类型了,然而如果设置为Date类型的话就不会报这种错误了,当然,你非要用 timestamp 类型的话,小编也帮你给解决了,也很简单。我把测试类给大家看一下吧,有图有真相
[java] view plain copy
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.lee.dao.FactoryDao;
- import org.lee.model.User;
- public class DateFormat {
- public static void main(String[] args) throws Exception {
- User user = FactoryDao.getUserDAO().getUserById("user"); //从数据库获取对象
- SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //创建要显示的日期格式
- //注意了,这里的 MM 在java中代表月份,而 mm 代表分钟, HH 代表24小时制的时间, hh 代表12小时制的时间,很严格的
- Date date = fmt.parse(user.getTime()); //将从数据库读出来的 timestamp 类型的时间转换为java的Date类型
- String s = fmt.format(date); //将这个时间格式化,转换为String类型
- System.out.println("user.getTime() : "+user.getTime()); //打印原本从数据库读出来的 timestamp 类型日期
- System.out.println("date.toLocaleString() : "+date.toLocaleString()); //打印使用Date.toLocaleString()方法得到的日期
- System.out.println("fmt.format(date) : "+s); //打印格式化之后的日期,这是最理想的日期格式
- /*Date To String*/
- String str = fmt.format(date);
- /*String To Date*/
- Date d = fmt.parse(s);
- }
- }
运行结果:
采用MySQL自带的函数DATE_FORMAT。
date_format(utt.created_at, '%Y-%m-%d %H:%i:%s') createdAt
date_format(utt.updated_at, '%Y-%m-%d %H:%i:%s') AS updatedAt
第一、直接在MySQL中解决:
SELECT T.ID, T.USERNAME, DATE_FORMAT(t.birthday, '%Y-%m-%d %k:%i:%s') as birthday FROM USERINFO T;
SQL语句中加DATE_FORMAT函数就不会带微秒。
第二、在Java中处理:
public static String getFullFormateString(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return date == null ? "" : sdf.format(date);
}
.0 到底是怎么来的?
怎么解决?除了substring
改为getTimestamp仍然不行?
评论:
正确读取时间的方法:
System.out.println(new Date(rs.getTimestamp('time')));
时间不能这样取,rs.getString()
用来取String
类型的数据。把时间直接按String
读取相当于先取取java.sql.Timestamp
该类型数据然后再对该数据进行toString()
所以才会得到你看到的“错误”的结果。
参考:http://docs.oracle.com/javase/7/docs/api/java/sql/Timestamp.html
Formats a timestamp in JDBC timestamp escape format. yyyy-mm-dd hh:mm:ss.fffffffff, where ffffffffff indicates nanoseconds.
或者:采用MySQL自带的函数DATE_FORMAT。
date_format(utt.created_at, '%Y-%m-%d %H:%i:%s') AS createdAt
date_format(utt.updated_at, '%Y-%m-%d %H:%i:%s') AS updatedAt