unix_timestamp()得到的时间无法和java当中得到的时间一样。 
例:在mysql中查询中用select unix_timestamp( logentry_time), logentry_time  from log where logentry_id=1 limit 0,30 
结果:1235061940  2009-02-19 16:45:40 
大家都知道unix_timestamp()得到的是秒数,java用getTimes()得到的是毫秒 
在java中试、 
Date now=new Date(1235061940000l); 
System.out.prinltn(now); 
结果是Fri Feb 20 00:45:40 CST 2009 
大家都看到了是差8个小时。但我又一次进行了测试。 
select * from log where unix_timestamp( logentry_time) > 1235061939 and  unix_timestamp(logentry_time) < 1235061941  limit 0,30 
这样应该能到得2009-02-19 16:45:40的值了吧。但是结果却是没有数据。 
本人希望mysql高手解说一下。如何才能得到这一条2009-02-19 16:45:40的记录.谢谢各位 

解决方案 »

  1.   

    logentry_time在表中是什么类型? char/datetime / TIMESTAMP  ?
    还有你的MySQL中时区的设置是什么?(这个关系应该不太,最好检查一下)
      

  2.   

    楼主啊,如果不考虑这些,测试结果就如下了。你不提供这些信息,别人也很难模拟你的问题。
    mysql> desc log;
    +---------------+----------+------+-----+---------+-------+
    | Field         | Type     | Null | Key | Default | Extra |
    +---------------+----------+------+-----+---------+-------+
    | logentry_time | datetime | YES  |     | NULL    |       |
    | logentry_id   | int(11)  | YES  |     | NULL    |       |
    +---------------+----------+------+-----+---------+-------+
    2 rows in set (0.06 sec)mysql> select * from log;
    +---------------------+-------------+
    | logentry_time       | logentry_id |
    +---------------------+-------------+
    | 2009-02-19 16:45:40 |           1 |
    +---------------------+-------------+
    1 row in set (0.02 sec)mysql> select unix_timestamp( logentry_time), logentry_time  from log ;
    +--------------------------------+---------------------+
    | unix_timestamp( logentry_time) | logentry_time       |
    +--------------------------------+---------------------+
    |                     1235033140 | 2009-02-19 16:45:40 |
    +--------------------------------+---------------------+
    1 row in set (0.01 sec)
      

  3.   

    如果我把我的MySQL时区改成UTC+0,则一切正常。mysql> SELECT @@global.time_zone, @@session.time_zone;
    +--------------------+---------------------+
    | @@global.time_zone | @@session.time_zone |
    +--------------------+---------------------+
    | SYSTEM             | +00:00              |
    +--------------------+---------------------+
    1 row in set (0.00 sec)mysql>mysql> select unix_timestamp( logentry_time), logentry_time  from log ;
    +--------------------------------+---------------------+
    | unix_timestamp( logentry_time) | logentry_time       |
    +--------------------------------+---------------------+
    |                     1235061940 | 2009-02-19 16:45:40 |
    +--------------------------------+---------------------+
    1 row in set (0.00 sec)mysql>
    mysql> select * from log where unix_timestamp( logentry_time) > 1235061939 and
    unix_timestamp(logentry_time)  < 1235061941 ;
    +---------------------+-------------+
    | logentry_time       | logentry_id |
    +---------------------+-------------+
    | 2009-02-19 16:45:40 |           1 |
    +---------------------+-------------+
    1 row in set (0.00 sec)mysql>