![](/img/trans.png)
[英]How to write DateTime.current in WHERE clause of Rails query?
[英]Ruby on Rails - Handling of DateTime.current and User Input Time
我在Postgres数据库和JRuby 1.7.12中使用Rails 3.2.9。
应用程序正在运行具有GMT + 7亚洲/曼谷时区的Ubuntu Server。
config.time_zone设置为Bangkok
Postgres时区也设置为Asia / Bangkok
在我的发票模型中,我有2个日期时间字段,分别称为document_date和Movement_date
->运动日期由应用程序使用DateTime.current生成
-> document_date由用户输入(即2014-07-28)
当用户保存发票时,两者都将转换为UTC并保存到数据库中。
对于motion_date,就可以了(因为这是预期的行为)
对于document_date,将其转换为UTC时,将另存为2014-07-27 17:00。
如何将document_date到2014-07-28 00:00保存到数据库中而不转换为UTC。
非常感谢您的帮助,建议和建议,并非常感谢。
如果我需要添加其他信息,请告诉我。
编辑:两者在PostgreSQL中的字段正在使用没有时区的时间戳
如果我正确理解,则希望document_date(用户输入)使用UTC而不是本地时间。 这是正确的吗? 如果是这样,您将不得不手动更改它,因为Rails会假设您希望在本地时间进行更改。
您可以做的是手动设置它,将日期字符串转换为datetime(String#to_datime),恰好在控制器上保存对象之前。 像这样:
def create
@invoice = Invoice.new(params[:invoice])
@invoice.document_date = params[:invoice][:document_date].to_datetime
@invoice.save
end
只要字符串上没有Time和TimeZone部分,String#to_datetime就会创建UTC DateTime(即:“ 2014-07-28 00:00:00 +0700”将转换为Bangkok DateTime)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.