2010-09-22 53 views
0

Wed Sep 22 13:15:02 -0400 2010转换为这种格式2010-08-23 13:15:02 -0400Ruby on Rails的:我怎么这个日期

左边是Time.now

的权利30.days.ago = \

+0

所以...什么是你的问题?你只是想要在右边的格式输出? – rfunduk 2010-09-22 17:19:05

+0

是的,导致右边的格式是MySQL使用的格式。 – NullVoxPopuli 2010-09-22 17:29:10

回答

2

您可以使用Time类中的to_s(:db)方法将其转换为数据库友好格式。

Time.now.to_s(:db) # => "2010-09-22 17:50:41" 

如果你真正需要的时区偏移量的信息,你可以自定义格式添加到Time::DATE_FORMATS,例如

Time::DATE_FORMATS[:db_with_zone_offset] = lambda { |time| 
    time.strftime("%Y-%m-%d %H:%M:%S #{time.formatted_offset(false)}") 
} 

之后,你可以简单地调用

Time.now.to_s(:db_with_zone_offset) => # "2010-09-22 17:48:21 +0000" 
+0

我添加了自定义格式(使用Time#formatted_offset),因为据我所知在strftime中没有格式化选项来显示时区偏移量('+0000')。 Rails在内置格式化类型中使用[类似策略](http://api.rubyonrails.org/classes/Time.html)。 (详见DATE_FORMATS [:rfc2822]) – sluukkonen 2010-09-22 18:06:15

1

两者是不同的数据类型。

>> Time.now.class 
=> Time 
>> 30.days.ago.class 
=> ActiveSupport::TimeWithZone 

使用strftime方法对其进行格式化。

1

如果你想在数据库格式的格式,那么你可以使用:

Time.now 
=> Wed Sep 22 19:54:24 +0200 2010 
Time.now.to_s(:db) 
=> "2010-09-22 19:54:48" 
Time.now.utc.to_s(:db) 
=> "2010-09-22 17:55:16"