浏览 2975 次
锁定老帖子 主题:Time to_s(:db) 的背后
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-19
其中,对时间格式化支持的主要代码下面这个文件中 active_support/core_ext/time/conversions.rb def self.included(klass) #:nodoc: klass.send(:alias_method, :to_default_s, :to_s) klass.send(:alias_method, :to_s, :to_formatted_s) end def to_formatted_s(format = :default) DATE_FORMATS[format] ? strftime(DATE_FORMATS[format]).strip : to_default_s end 用included对被加载代码,进行hack,在rails中到处都是,最经典的是rails acts_as模块, 这个会在以后的blog中重点讲到。 在这里,conversions.rb将to_s的调用转移到方法to_formatted_s。 下面就很清楚了,直接从常量DATE_FORMATS中拿出format,然后交给strftime。 看看,短短两行代码,就可以将时间格式化的api转换成: Time.now.to_s(:db) #"2007-11-19 12:10:14" rails内置了4个 DATE_FORMATS = { :db => "%Y-%m-%d %H:%M:%S", :short => "%d %b %H:%M", :long => "%B %d, %Y %H:%M", :rfc822 => "%a, %d %b %Y %H:%M:%S %z" } 当然,如果你要扩展,也很容易 Time::DATE_FORMATS[:stamp] = '%Y%m%d%M%S' 这个代码在rails加载完毕后加入,或者直接放到lib中的某个文件中。 使用的时候 >> Time.now.to_s(:stamp) => "200711191316" >> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-19
好文,谢谢,以前一直知道在rails里面这样用,但没有仔细看源码到底是怎么回事,总觉得处理时间转换方面的事情是件麻烦的事情,就懒得自己弄,全部交给rails来处理,没有想到原来这么简单
在非rails的代码里面也前一直用这样的写法 require 'rubygems' gem 'rails' require 'active_support/core_ext/time/conversions' class Date include ActiveSupport::CoreExtensions::Time::Conversions end Time.now.to_s(:db) 原来就是 Time.now.strftime("%Y-%m-%d %H:%M:%S") |
|
返回顶楼 | |
发表时间:2007-11-19
# require 'rubygems' # gem 'rails' # require 'active_support/core_ext/date/conversions' ..... 不用这么麻烦的。 active_support存在的意义,就在于你在非rails项目中使用,所以只需要一句 require 'active_support' 就会把所有的扩展都到入 |
|
返回顶楼 | |
发表时间:2007-11-19
谢谢楼上,你这个更有用!
|
|
返回顶楼 | |