【问题标题】:Why rails String to DateTime conversion ignores timezone?为什么rails String到DateTime的转换忽略时区?
【发布时间】:2015-07-09 12:12:02
【问题描述】:

我有一个带参数的请求:

...&from_date=2015-07-09T11:28:06.763+02:00

在控制器中使用params[:from_date] 时返回DateTime 对象:

Thu, 09 Jul 2015 11:28:06 +0000

这是 UTC 时间,但转换时不考虑原始时区 (+02:00)。此外,应用时区设置为时区“华沙”(+2:00)。

如何让 Rails 识别 params[:from_date] 中的时区?

编辑。

我改变了参数类型:

optional :from_date, type: DateTime, desc: "From date"

到 可选:from_date,类型:String,desc:“从日期”

并且发现 rails 将“+”转换为空格,所以我得到“2015-07-09T11:28:06.763 02:00”。这样问题就找到了。

【问题讨论】:

  • 当我尝试这个时,我得到:"2015-07-09T11:28:06.763+02:00".to_datetime #=> Thu, 09 Jul 2015 11:28:06 +0200。您如何使用params[:from_date 值?
  • 是的,我确定。我只是忽略时区而度过了愉快的时光。不是普通的控制器,而是葡萄的api方法。
  • 我在方法开始时使用 binding.pry,然后将 'params[:from_date]' 命令放在控制台中。然后我得到了参数中的确切时间和日期,但时区是 +0000,所以它与输入参数有本质的不同。

标签: ruby-on-rails datetime timezone params


【解决方案1】:

使用此代码:

params[:from_date].to_datetime.in_time_zone('Warsaw')

【讨论】:

  • params[:from_date] 已经有一个 DateTime 类。此外,它的值错误 - 不考虑请求参数中的时区。方法 'in_time_zone("Warsaw") 只是将此错误值转换为不同的时区
猜你喜欢
  • 1970-01-01
  • 2013-10-20
  • 2015-05-11
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
相关资源
最近更新 更多