NutzCN Logo
问答 dao 插入时间和插入到数据库不一致
发布于 2998天前 作者 菜二 3611 次浏览 复制 上一个帖子 下一个帖子
标签:

17:16:50.248 [http-apr-80-exec-12] DEBUG (Log4jLogAdapter.java:113) - INSERT INTO hk_job(keycode,title,price,content,number,s_time,e_time,state,subtime) VALUES(?,?,?,?,?,?,?,?,?)
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---------------------|-----|------|-----|-----|---------------------|---------------------|---|---------------------|
| 8034816799311689653 | 123 | NULL | 123 | 123 | 2016-08-31 00:00:00 | 2016-08-31 00:00:00 | 1 | 2016-08-31 00:00:00 |
For example:> "INSERT INTO hk_job(keycode,title,price,content,number,s_time,e_time,state,subtime) VALUES('8034816799311689653','123',NULL,'123',123,'2016-08-31 00:00:00','2016-08-31 00:00:00',1,'2016-08-31 00:00:00') "

== 插入到数据库
INSERT INTO mancar_website.hk_job (keycode, title, price, content, number, s_time, e_time, state, subtime) VALUES ('8034816799311689653', '123', NULL, '123', '123', '2016-08-30 16:00:00', '2016-08-30 16:00:00', '1', '2016-08-30 16:00:00');

18 回复

nutz版本,数据库版本,环境,字段类型,java属性类型

来自炫酷的 NutzCN

nutz版本:nutz-1.r.57.jar
数据库:MySQL - 5.7.14
数据库字段类型: datetime
java属性类型:Date

win10 和 win2012 tomcat 8 和 tomcat9 jdk 1.8

@qq_dd3357ad 补充下 druid-1.0.24.jar 和 mysql-connector-java-6.0.3.jar

@qq_dd3357ad java属性换成java.util.Date

来自炫酷的 NutzCN

@wendal java属性换成java.util.Date 就是这个

话说, 在哪里看到是相差8小时的?

先insert,然后fetch, 对比一下两个对象的date属性的毫秒数. 不要用数据库函数格式化.

不是用日期格式化和插入的结果一样:=== 2016-08-31 00:00:00

所以, 问题应该出在日期格式化上了

我这样执行显示没有问题,估计是你在封装dao的时候函数做什么限制了
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
2016-09-01 16:42:40

16:46:46.694 [http-apr-80-exec-24] DEBUG (Log4jLogAdapter.java:113) - SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
{"DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')":"2016-09-01 16:46:46"}

/**
* 分页查询(cnd)
*
* @param pageNumber
* @param pageSize
* @param cnd
* @return
*/
public Pagination listPage(Integer pageNumber, int pageSize, Condition cnd) {
pageNumber = getPageNumber(pageNumber);
pageSize = getPageSize(pageSize);
Pager pager = this.dao().createPager(pageNumber, pageSize);
List list = this.dao().query(getEntityClass(), cnd, pager);
pager.setRecordCount(this.dao().count(getEntityClass(), cnd));
return new Pagination(pageNumber, pageSize, pager.getRecordCount(), list);
}
用这个查询 使用sql 函数查询出来就是时间错位的

现在的情况是:

// 1. now()返回的结果是对的
// 2. insert/fetch得到的Date的时间戳是一致的
// 3. DATE_FORMAT一个date字段得到的时间字符串是不对的

所以呢, 还需要验证一下, now的值是多少

System.out.println(dao.execute(Sqls.fetchRecord("select now()")).getObject(Record.class));

另外, DATE_FORMAT是可以传时区的,加上时区试试

17:15:14.321 [http-apr-80-exec-9] DEBUG (Log4jLogAdapter.java:113) - select now()
{
"now()" :"2016-09-02 01:15:14"
}

@qq_dd3357ad 恩,我本地跑出来的结果是正确的本地时间

来自炫酷的 NutzCN

你本地连接数据库的jar 不是mysql-connector-java-6.0.3.jar 试下这个

OK了,设置为东8区 删除以前数据重新添加就和本地时间一致了~

添加回复
请先登陆
回到顶部