Ruby on rails RubyonRails-处理DateTime.current和用户输入时间
我将Rails3.2.9与Postgres数据库和JRuby1.7.12一起使用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并保存到数据库中 对于移动日期,这是正常的(因为这是
应用程序正在运行带有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
。