最近在干活的时候发现一个问题,数据库里存入的时间总是比自己预期的时间多 8 个小时。 具体看代码:
controller:
time_from = DateTime.strptime("2012-10-09 21:00:00", '%Y-%m-%d %H:%M:%S')
object.new(:time_from => time_from)
object.save
说明:以上代码为 controller 中的代码,即希望存入数据库中的时间为 2012-10-09 21:00:00 但是实际存入的时间却是 2012-10-10 05:00:00,结果是真实存入的时间比自己预期的时间多了 8 个小时。 需要解决的问题 1: 想让这两个时间达到一致
当我在 console 中拿到该对象的时候,又有了问题:
object = TimeSpecial.first
object.time_from # => Tue, 10 Oct 2012 05:00:00 CST +08:00
说明:即把上面刚刚存入的数据取出来的时候,访问该对象的 time_from 属性的时候,得到的值是数据库中的值,并不是当初期望存入的值。 需要解决的问题 2:希望该值为当初希望存入的值
我的配置:application.rb 文件:
config.active_record.default_timezone = :local
config.time_zone = 'Beijing'
我的数据库为 mysql,对应的时区为:
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
因为我需要在 controller 中做时间的对比,即: Time.now < object.time_from 类似这样的对比,但是因为时区问题,对比总是会有错误,这个问题要怎样解决呢,望各位大侠指点了