【问题标题】:Ruby Enterprise Edition giving Time.now in wrong formatRuby 企业版以错误的格式提供 Time.now
【发布时间】:2011-08-24 00:16:42
【问题描述】:

在我的 VPS (Ubuntu 10.04LTS) 上,我通过 RVM 安装了 ree-1.8.7-2011.03 和 ruby​​-1.9.2-p180。我的问题是,当我在 ree-1.8.7(irb) 中调用 Time.now 时,我得到 Thu May 12 12:16:50 +0200 2011,当我在 ruby​​-1.9.2(irb) 中做同样的事情时,我得到 2011-05-12 12:17:44 +0200

问题是日期的 ree 版本在我的 rails 查询中不可用(生成的 SQL 完全被破坏了)。在每个查询中使用 strftime 格式化时间目前不是一个选项,切换到 1.9.2 也不是一个选项,所以我需要你的帮助来弄清楚为什么会发生这种情况并修复它。

感谢您的帮助!

【问题讨论】:

  • 如何将日期传递给查询?你不是用AR的参数插值吗?
  • 在大多数情况下我是这样,但是当我使用字符串插值时,一些较大的查询更容易阅读。
  • 好的,请记住,您也可以将:name 形式与哈希一起使用,而不是将? 与数组一起使用。足够可读,甚至比普通的字符串插值 IMO 还要好。
  • 谢谢,我知道有一段时间了,但我还没有使用它。生病试一试,看看它的外观。谢谢!

标签: ruby-on-rails ruby ruby-on-rails-3 locale ruby-enterprise-edition


【解决方案1】:

在你的 config/initializers/app.rb 中这样的东西怎么样

Time::DATE_FORMATS[:default] = "Your preferred date format"

【讨论】:

  • Placing Time::DATE_FORMATS[:default]= "%F %T %Z" 在我的初始化程序中没有任何效果,但无论如何,我决定在我的所有查询中使用 strftime,如西蒙娜·卡莱蒂。谢谢!
【解决方案2】:

这不是 REE 问题。 Ruby 1.9.2 更改了 Time#to_s 的默认格式。

$ rvm use 1.8.7
ruby-1.8.7-p334 :001 > Time.now
# => Thu May 12 12:42:35 +0200 2011 

$ rvm use 1.9.2
ruby-1.9.2-p180 :001 > Time.now
# => 2011-05-12 12:42:44 +0200 

最好不要依赖默认的 Time#to_s 格式,而是始终使用自定义帮助程序或方法来格式化日期输出,否则您无法控制信息的显示方式。

目前无法在每个查询中使用 strftime 格式化时间

它不仅应该是一种选择,而且应该是您的首选。我强烈建议您修复现有代码以使用自定义格式化方法。

临时解决方法是覆盖 Ruby 1.8.7 Time#to_s 方法以使用自定义格式。但是,进行此类更改可能会破坏其他库。

【讨论】:

  • 谢谢,在过去的几分钟里我得出了同样的结论,以为我不知道 1.8 和 1.9 之间的变化。我现在知道我必须使用 strftime,这不是一个直接的选择。
  • 但是在字符串中使用 #{Time.now} 将时间插入 where 子句和执行“?”之间有区别吗?替换?
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
相关资源
最近更新 更多