Rails 2.1快要release了,下面是对Time Zone一篇文章的翻译,觉得有点意思,便拿来翻译翻译,正好可以学习一番。翻译质量很差,希望不要嘲笑。
(链接在此:
http://mad.ly/2008/04/09/rails-21-time-zone-support-an-overview/)
图片就不自己搞rails来原创的,直接取之来用,另外我已将图片打包,免得链接失效了就不好办了
具体的API可以查看
http://api.rubyonrails.org/
可惜可爱的ruby 1.9x 稳定版还是遥遥无期
看看rails 2.1的这个新功能吧,Time Zone
什么是Time Zone,就是时区,对,论坛里经常有设置的,UTC或者是GMT
UTC = Coordinated Universal Time. 中文名称为协调世界时
GMT = Greenwich Mean Time. 中文名称为格林尼治时
那UTC和GMT又有何区别?据说UTC=GMT +/- 0.9s
废话多了
在rails 2.1中,编辑
# config/environment.rb
config.time_zone = 'UTC'
这就把UTC做成了默认设置
同时,也可以运行
time:zones:all,
time:zones:us,还有
time:zones:local来获取一些相关的时区信息
$ rake time:zones:local
* UTC -06:00 *
Central America
Central Time (US & Canada)
Guadalajara
Mexico City
Monterrey
Saskatchewan
没错,可以把Central Time设置成默认的
# config/environment.rb
config.time_zone = 'Central Time (US & Canada)'
下面用scaffold来试试看这个新功能
$ script/generate scaffold Task name:string alert_at:datetime
$ rake db:migrate
$ script/server
create后就可以看到时区了
图片是-5区,记得我们国家是+8区
用script/console验证一下
>> t = Task.find_by_name('foo')
=> #< Task … >
>> t.alert_at
=> Sun, 06 Apr 2008 10:30:00 CDT -05:00
>> t.alert_at_before_type_cast
=> "2008-04-06 15:30:00"
可以得知,2008-04-06 15:30:00时间是UTC时间,而Sun, 06 Apr 2008 10:30:00 CDT -05:00是CDT时间,为上面设置的时区
现在把日期改一下,改成1月份
时区变成-6的了,因为已经不是夏时制了(什么是夏时制?请看
http://baike.baidu.com/view/131456.htm)
再次验证一下
>> t = Task.find_by_name('foo')
=> #< Task … >
>> t.alert_at
=> Sun, 06 Jan 2008 10:30:00 CST -06:00
>> t.alert_at_before_type_cast
=> "2008-01-06 16:30:00"
用户自定义时区
创建一个scaffold
$ script/generate scaffold User name:string time_zone:string
$ rake db:migrate
用时间选择框代替文本框
# views/users/new.html.erb
<%= f.time_zone_select :time_zone, TimeZone.us_zones %>
看看效果
为了demo效果,添加一个login_from_querystring before_filter到controller
# controllers/application.rb
before_filter :login_from_querystring
def login_from_querystring
@current_user = User.find_by_name(params[:user])
end
再添加一个set_time_zone before_filter,用来设置当前用户的时区信息
# controllers/application.rb
before_filter :set_time_zone
def set_time_zone
Time.zone = @current_user.time_zone if @current_user
end
加个view,用来显示谁登录了,登录用户的时区,用户的当前时间
# views/layouts/tasks.html.erb
Current user: <%= @current_user.name if @current_user %>
Current time zone: <%= Time.zone.name %>
Current time: <%= Time.zone.now.inspect %>
<hr />
最后,需要显示一下时间(只是按照我的理解,原文可能并非此意)
<%=h task.alert_at.inspect %>
用户登录后,会看到之前已经设置好的时区
用户的页面显示的都是他们所在的时区的时间
如果用户没有登录,显示的就是config.time_zone中设置的时区
在当前时区用来修改设置的一些方法
Time.zone.local(), Time.zone.parse() and Time.zone.at() Time.zone.now
>> Time.zone = 'Hawaii'
=> "Hawaii"
>> Time.zone.now
=> Wed, 09 Apr 2008 15:48:18 HST -10:00
>> Time.zone.local(2008, 4, 9, 15, 48, 18)
=> Wed, 09 Apr 2008 15:48:18 HST -10:00
>> Time.zone.parse('2008-04-09 15:48:18')
=> Wed, 09 Apr 2008 15:48:18 HST -10:00
>> Time.zone.at(1207792098)
=> Wed, 09 Apr 2008 15:48:18 HST -10:00
in_time_zone函数可以把任何实例转化成存在Time.zone中的任何时区
>> Time.zone = 'Alaska'
=> "Alaska"
>> t = Time.utc(2000)
=> Sat Jan 01 00:00:00 UTC 2000
>> t.in_time_zone
=> Fri, 31 Dec 1999 15:00:00 AKST -09:00
也可以这样,用名称代表时区
>> t.in_time_zone('Hawaii')
=> Fri, 31 Dec 1999 14:00:00 HST -10:00
>> t.in_time_zone(-6.hours)
=> Fri, 31 Dec 1999 18:00:00 CST -06:00
升级
看原文吧,别鄙视我
1. the new time zone features assume that the database is storing times in UTC, so if you've currently storing times in the database in a zone other than UTC, you'll need to migrate existing data to UTC
2. if the tzinfo_timezone plugin is installed, you'll need to remove it, given that it overrides the TimeZone class in ActiveSupport
3. the TZInfo gem is no longer required, given that it's now bundled in ActiveSupport. However, if you do have a recent version of this gem installed, Rails will favor the gem over the bundled version.
4. The bundled TZInfo is a slimmed-down version of the gem, so if you're interacting with the TZInfo API directly, you should have the gem installed
5. If you *don't* wish to use the new time zone features — the new features shouldn't interfere with your existing code, as long as you don't declare config.time_zone in environment.rb
分享到:
- 2008-04-18 18:25
- 浏览 2321
- 评论(4)
- 论坛回复 / 浏览 (3 / 8407)
- 查看更多
相关推荐
### Ruby on Rails 2.1 新特性详解 #### 引言 自2004年7月David Heinemeier Hansson公开...随着Rails 2.1版本的广泛应用,我们有理由相信,Ruby on Rails将会继续引领Web开发的潮流,并为更多用户提供卓越的Web体验。
综上所述,《RAILS2.1的中文版资料》为Ruby on Rails开发者提供了丰富的资源和深入的技术细节,不仅有助于开发者更好地理解2.1版本的新特性,还能帮助他们利用这些特性构建更高效、更稳定的Web应用程序。
- **基于UTC的迁移**:在Rails 2.1中,所有的数据库迁移默认使用协调世界时(UTC)进行时间戳标记,这有助于避免因时区不同导致的数据一致性问题。 #### ActionPack和ActionController改进 - **增强缓存机制**:...
而在接下来的几个月里,全球超过1400名开发者为Rails贡献了1600多个补丁,最终在2008年6月1日,Ruby on Rails 2.1正式发布。这次版本更新不仅带来了诸多新特性,还进一步优化了原有的功能。 #### Ruby on Rails 2.1...
标题“rails2.1与Oracle连接所需gem”指的是在Rails 2.1版本的应用程序中,如何配置和使用Oracle数据库的宝石(gem)扩展。Rails是Ruby on Rails框架的简称,是一个流行的开源Web应用程序框架,而Oracle则是一种企业...
rails 2.1的api文档,chm格式,官方最新版
Rails 2.1是其历史版本中的一个重要里程碑,引入了许多新特性与改进,对于理解现代Web开发有着重要的参考价值。 1. **ActiveRecord**:Rails的核心组件之一,负责数据持久化。在Rails 2.1中,ActiveRecord增强了...
gem 'browser-timezone-rails' 确保您的application.js中包含以下每个条目: //= require js.cookie //= require browser_timezone_rails/set_time_zone 而已! 无需其他配置,因为使用此gem可以完成所有工作,...
rails-timezone-js 类使用的时区名称格式与IANA维护的标准使用的格式不同。 rails-timezone-js提供了使用ActiveSupport中的在ActiveSupport时区名称之间进行转换的功能。 该库可以在node.js和浏览器中使用。 用法...
本书最初是为 Rails 2 编写的,在本书出版时,当前普遍可用的 Gem 版本为 Rails 2.1。书中的代码已经过该版本的测试。 #### 本书的演变历程 本书起源于与第二版相同的文本,该版涵盖了 Rails 1.2.6。包含原始文本...
标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...
然而,如果你确实决定运行这个实验性的Rails代码,你会发现本书中的一些内容(以及你现有的Rails应用程序中的某些部分)可能不再运行。要确定你正在运行的Rails版本,可以在命令提示符下输入`rails -v`。 - Sam ...
Subsonic是一个强大的开源.NET框架,它借鉴了Ruby on Rails(Rails)的设计理念,为.NET开发者提供了快速开发网站和数据库应用程序的能力。这个框架的核心特点在于它的简单性、灵活性和高效性,使得开发者能够以更少...
在本书印刷时,可用的Rails Gem版本为2.1,并且书中所包含的代码已经过该版本的测试。 - **Rails 2的特性**: - Rails 2引入了多项改进,包括性能优化、安全增强以及API的更新。 - 为了确保读者能够顺利地跟随书...
Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...
rails-timeago提供了一个timeago_tag助手来创建可用于插件的时间标签。 安装 将此行添加到您的应用程序的Gemfile : gem 'rails-timeago' , '~> 2.0' 然后执行: $ bundle 或将其自己安装为: $ gem install ...
Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它遵循模型-视图-控制器(MVC)的架构模式,设计用来快速开发数据库驱动的动态网页。随着Rails版本的更新迭代,此书聚焦于一个特定的版本,帮助...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
截至本书印刷时,当前可用的Rails Gem版本为2.1。书中所包含的所有代码均已在该版本上进行了测试。 在本书撰写初期,其内容与第二版相同,后者涵盖了Rails 1.2.6版本。在这些章节中,页面头部和底部采用灰色显示,...