回答

收藏

如何在查询期间将时间转换为当地时区的日期?

技术问答 技术问答 72 人阅读 | 0 人回复 | 2023-09-13

我们有一个非常简单的付款模型,默认的 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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则