3rd Jun, 2008

Rails 2.1 时区简介

今年的儿童节不止属于孩子们,它也属于所有Rails的开发者,因为DHH给大家送上了最好的儿童节礼物:Rails 2.1。因为最近正在做一个需要时区支持的项目,2.1的时区功能绝对是雪中送炭,下面让我们看看如何使用2.1中的时区功能:

先升级到2.1,然后建一个新应用

$ sudo gem update rails
$ rails demo210
$ cd demo210

然后建一个post model:

$ script/generate model post title:string body:text published_at:datetime
$ rake db:migrate

现在我本机的时间是:2008-06-03 15:55:00,然后让我们进入Console,创建一个新的Post:

>> post = Post.create(:published_at => Time.now)
>> post.published_at
=> Tue, 03 Jun 2008 07:55:00 UTC +00:00

变成了7:55,没错,因为我本地的时区设置是UTC,而我们比UTC快了8小时,现在让我们将时区修改到上海,然后再来看看published_at:

>> Time.zone.name
=> “UTC”
>> Time.zone = ‘Asia/Shanghai’
=> “Asia/Shanghai”
>> post.reload
>> post.published_at
=> Tue, 03 Jun 2008 15:55:00 CST +08:00

可以看到,现在时间已经变成了东八区,这是怎么实现的呢?实际上Rails在数据库中保存的依然是UTC时间,我们可以通过column_before_type_cast来查看它:

>> post.published_at_before_type_cast
=> “2008-06-03 07:55:00″

也就是说published_at实际上是根据原始的UTC时间加上当前时区的设置重新计算出来的。

关于Rails 2.1的其它特性,可以参看官方Blog给出的介绍链接,基本上只看代码就能明白怎么回事。

评论

这里有个中文视频介绍怎么用 rails 2.1时区:
http://casts.rubynow.com/episodes/1-time-zones-in-rails-2-1-rails-2-1

留条评论?

Your response:

Categories