我们有一个非常简单的付款模型,默认的 created_at日期时间字段,我们必须在日期范围内搜索,所以我这样做:7 F# z# k0 j/ [; U* @6 S
>> Payment.all(:conditions => ["Date(payments.created_at) >= ? and Date(payments.created_at) 我在使用Date函数时遇到问题。例如 / A1 T% h7 G3 v- n6 j>> Payment.find(2577).created_at=> Thu,15 Dec 2011 18:15:00 UTC 00:00但# J: A; ^4 m9 w# M% k& T B, ?2 y
>> Payment.find(2577).created_at.localtime=> Fri Dec 16 01:15:00 201100 因此,当我们在12月16日搜索付款时,因为Date(payments.created_at)将UTC时间转换为日期,转换为12月15日,因此没有结果。 6 ]4 v) ^8 |1 }是否可以修改Date(payments.created_at),为了改变搜索当地时区的日期?我们正在使用它Rails 2.3.5和postgresql。* h0 D* @2 Q w0 v% I/ Y* V
2 [+ N4 L/ P. c9 c0 D- r2 v3 Z 解决方案: , ?" r' T9 ]6 q" t7 Y 终于让它工作了!它不是很漂亮(我希望有一个更干净的解决方案),但它是有效的:$ U9 G: r/ I8 j! d1 e+ d& p6 w
>> Payment.all(:conditions => ["Date((payments.created_at at time zone 'UTC at time zone :timezone) >= :start_date and Date((payments.created_at at time zone 'UTC at time zone :timezone) start_date,:end_date => end_date, timezone => 'Asia/Katmandu'])然而,我并不真的喜欢这样做: 5 S- N5 c' O! J) ~/ X/ ZDate((payments.created_at at time zone 'UTC') at time zone 'Asia/Katmandu')为何postgresql不允许你这样做? 9 n- A4 z( j2 S# `Date(payments.created_at at 'Asia/Katmandu