Ruby on rails RubyonRails-处理DateTime.current和用户输入时间

Ruby on rails RubyonRails-处理DateTime.current和用户输入时间,ruby-on-rails,postgresql,jrubyonrails,Ruby On Rails,Postgresql,Jrubyonrails,我将Rails3.2.9与Postgres数据库和JRuby1.7.12一起使用 应用程序正在运行带有GMT+7亚洲/曼谷时区的Ubuntu服务器 config.time_zone设置为曼谷 Postgres时区也设置为亚洲/曼谷 在我的发票模型中,我有两个日期时间字段,称为文档日期和移动日期 ->移动日期由应用程序使用DateTime.current生成 ->文件日期由用户输入(即2014-07-28) 当用户保存发票时,两者都将转换为UTC并保存到数据库中 对于移动日期,这是正常的(因为这是

我将Rails3.2.9与Postgres数据库和JRuby1.7.12一起使用

应用程序正在运行带有GMT+7亚洲/曼谷时区的Ubuntu服务器
config.time_zone设置为曼谷
Postgres时区也设置为亚洲/曼谷

在我的发票模型中,我有两个日期时间字段,称为文档日期和移动日期

->移动日期由应用程序使用DateTime.current生成
->文件日期由用户输入(即2014-07-28)

当用户保存发票时,两者都将转换为UTC并保存到数据库中

对于移动日期,这是正常的(因为这是预期的行为)

对于文档_日期,当转换为UTC时,将保存为2014-07-27 17:00

如何在不转换为UTC的情况下将2014-07-28 00:00的文档保存到数据库中

我们将非常感谢您的帮助、建议和建议

如果有任何其他信息我应该补充,请让我知道


编辑:postgresql中的字段都使用不带时区的时间戳

如果我理解正确,您希望文档的日期(用户输入)是UTC,而不是本地时间。对吗?如果是这样,您将不得不手动更改它,因为Rails假定您希望在本地时间更改它

您可以做的是手动设置它,在对象保存到控制器上之前,将日期字符串转换为日期时间(字符串#转换为_datime)。诸如此类:

def创建
@发票=发票。新建(参数[:发票])
@invoice.document\u date=参数[:invoice][:document\u date]。to\u datetime
@发票.保存
结束

字符串#to_datetime将创建UTC日期时间,只要字符串上没有时间和时区部分(即:“2014-07-28 00:00:00+0700”将转换为曼谷日期时间).

如果将
文档日期
字段定义为
日期
而不是
日期时间
时间戳
它不会保存时间部分,因此如果我收到带有时区部分的日期时间(即:“2014-07-28 00:00:00+0700”),那么我应该使用参数[:发票][:文档日期][to\u datetime.strftime(%Y-%m-%d”).to_datetime?@如果您只想要日期部分,您可以做的是:
“2014-07-28 00:00:00+0700”。to_date
。如果希望将其转换为datetime类的实例,请在末尾添加
。\u datetime