【发布时间】:2016-06-03 21:45:25
【问题描述】:
我有一个名为“Sessions”的表,其中包含一个 starts_at 字段(日期时间)。我想应用一个名为“starts_after”的过滤器,它返回在一天中的某个时间之后开始的所有会话(忽略日期,只查看会话时间)。所有时间都以 UTC 格式存储在数据库中。容易吧?但随之而来的是时区。每个会话都属于一个事件,该事件有一个与之关联的时区。现在我有:
time = Time.new('1','1','1','14','00,'00','-07:00)
Schedulables.where("DATE_FORMAT(CONVERT_TZ(schedulables.starts_at,'-07:00'), '%H,%i') >
DATE_FORMAT('#{time}', '%H,%i')")
但是,只有开始时间为 17:00 或更长的会话才能返回给我。还值得注意的是,服务器时间为 EST,17:00 和 14:00 之间的差异等于我的服务器时区 (-4:00) 和我在这里处理的时区 (-7: 00)。
【问题讨论】:
-
基本上,无论哪个值都不会改变,您转换为其他值的 TZ。例如如果您正在执行
select * from foo where dbfield=$value之类的操作,您可以将$value转换为dbfield 的TZ - 在查询启动时进行一次转换,完成。诉将每个 dbfield 转换为 $value 的 tz。
标签: mysql ruby-on-rails activerecord