`
t0uch
  • 浏览: 57243 次
  • 性别: Icon_minigender_1
  • 来自: 柳州
社区版块
存档分类
最新评论

听说Rails 2.1有个Time Zone

阅读更多
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
分享到:
评论
4 楼 Dreamer 2008-06-08  
楼主用的竟然是Mac
3 楼 PBFox 2008-05-06  
在2.0版本中就已经有了;
2 楼 t0uch 2008-04-21  
确实之前就有了,不过Rails 2.10是Built-in的

多了一些新特性,比如可以直接rake Time:zone:local,让东西用起来更方便了

从这两个连接可以看出一些端倪
http://dev.rubyonrails.org/changeset/8806
http://dev.rubyonrails.org/changeset/8696

rails 新特性详情请见
http://weblog.rubyonrails.org/2008/4/1/a-taste-of-what-s-coming-in-rails-2-1
1 楼 jerry 2008-04-19  
好像不用2.1就已经有时区了,2.02就有了.

相关推荐

    rails2.1與Oracle 連結所需gem

    标题“rails2.1与Oracle连接所需gem”指的是在Rails 2.1版本的应用程序中,如何配置和使用Oracle数据库的宝石(gem)扩展。Rails是Ruby on Rails框架的简称,是一个流行的开源Web应用程序框架,而Oracle则是一种企业...

    What’s New In Rails 2.1

    What’s New In Rails 2.1: A Well Produced, Free E-Book

    RAILS2.1的中文版资料

    找了好久才找到的rails2.1的中文版资料,给广大rails爱好者下载~

    rails 2.1 CHM api文档

    rails 2.1的api文档,chm格式,官方最新版

    ruby on rails 2.1新特性介绍

    ruby on rails 2.1新特性介绍(中文版)

    rail 2.1 chm

    Rails 2.1是其历史版本中的一个重要里程碑,引入了许多新特性与改进,对于理解现代Web开发有着重要的参考价值。 1. **ActiveRecord**:Rails的核心组件之一,负责数据持久化。在Rails 2.1中,ActiveRecord增强了...

    ruby on rails 2.1 what is new (CN)

    ror , ruby,rais最新 關鍵更新,

    browser-timezone-rails:Rails引擎,将每个请求的Rails时区设置为浏览器时区

    gem 'browser-timezone-rails' 确保您的application.js中包含以下每个条目: //= require js.cookie //= require browser_timezone_rails/set_time_zone 而已! 无需其他配置,因为使用此gem可以完成所有工作,...

    rails-timezone-js:在node.js和浏览器之间,在Rails ActiveSupport TimeZone名称和IANA时区数据库格式之间进行转换

    rails-timezone-js 类使用的时区名称格式与IANA维护的标准使用的格式不同。 rails-timezone-js提供了使用ActiveSupport中的在ActiveSupport时区名称之间进行转换的功能。 该库可以在node.js和浏览器中使用。 用法...

    Rails相关电子书汇总

    标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...

    INSPINIA_Rails_Full_Version-v2.6.2.1

    INSPINIA_Rails_Full_Version-v2.6.2.1 是一款基于Ruby on Rails框架的现代化Web应用程序模板,适用于构建高效、功能丰富的管理界面。这个版本2.6.2.1是INSPINIA的最新更新,旨在提供一个稳定、高性能的基础,帮助...

    Subsonic2.1版 类似Rails的开源.NET项目

    Subsonic是一个强大的开源.NET框架,它借鉴了Ruby on Rails(Rails)的设计理念,为.NET开发者提供了快速开发网站和数据库应用程序的能力。这个框架的核心特点在于它的简单性、灵活性和高效性,使得开发者能够以更少...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    rails-timeago:时间标记的Rails助手,可以与jQuery Timeago插件一起使用

    rails-timeago提供了一个timeago_tag助手来创建可用于插件的时间标签。 安装 将此行添加到您的应用程序的Gemfile : gem 'rails-timeago' , '~&gt; 2.0' 然后执行: $ bundle 或将其自己安装为: $ gem install ...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    提升Ruby on Rails性能的几个解决方案

    简介 Ruby On Rails 框架自它提出之日...Rails 是一个真正彻底的 MVC(Model-View-Controller) 框架,Rails 清楚地将你的模型的代码与你的控制器的应用逻辑从 View 代码中分离出来。Rails 开发人员很少或者可能从未遇到

    Rails

    标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...

    使用Aptana+Rails开发Rails Web应用(中文)

    例如,要在Rails应用中创建一个新的资源,如博客文章,你需要在models目录下创建一个名为`post.rb`的文件,定义Post类,并设置属性如标题和内容。在controllers目录下创建`posts_controller.rb`,定义控制器方法,如...

    jquery-rails, 一个 gem,用于自动使用jQuery和 Rails 3.zip

    jquery-rails, 一个 gem,用于自动使用jQuery和 Rails 3 railsjQuery 面向 Rails 如此伟大。这里 gem 提供:jQuery 1.7.2jQuery UI 1.8.18 ( 仅适用于 javascript )jQuery UJS适配器assert_select_j

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics