结合
http://marklunds.com/articles/one/311
和手册,完整的一个实现各时区时间转换的一个例子:
首先保证服务器安装tzinfo插件
gem install tzinfo
1、配置环境
2、相应的类中
3、某模型中有一个字段为time_zone,string类型,用来存储用户设置的他所在的时区
4、新建用户时,使用下面select
5、新建action中
6、相应的helper中
7、相应的view中得到本地时间
8、action中转换时间
和手册,完整的一个实现各时区时间转换的一个例子:
首先保证服务器安装tzinfo插件
gem install tzinfo
1、配置环境
ruby 代码
- ActiveRecord::Base.default_timezone = :utc
2、相应的类中
ruby 代码
- require 'tzinfo'
3、某模型中有一个字段为time_zone,string类型,用来存储用户设置的他所在的时区
ruby 代码
- class User < ActiveRecord::Base
- composed_of :tz, :class_name => 'TZInfo::Timezone',
- :mapping => %w(time_zone name)
- #回调函数对tz进行赋值
- def after_find
self.tz=TZInfo::Timezone.new(self.time_zone) - end
- end
4、新建用户时,使用下面select
ruby 代码
- <%= time_zone_select 'user', 'timezone_name', TZInfo::Timezone.all.sort,
- :model => TZInfo::Timezone %>
5、新建action中
ruby 代码
- @user.tz=TZInfo::Timezone.new(params[:user][:timezone_name])
6、相应的helper中
ruby 代码
- def format_datetime(datetime)
- return datetime if !datetime.respond_to?(:strftime)
- datetime = @user.tz.utc_to_local(datetime) if @user
- datetime.strftime("%m-%d-%Y %I:%M %p")
- end
7、相应的view中得到本地时间
ruby 代码
- <%= format_datetime(Time.now) %>
8、action中转换时间
ruby 代码
- def new
- @email.schedule_date = @user.tz.utc_to_local(Time.now) # Default schedule date in local time
- end
- def create
- @email.schedule_date = @user.tz.local_to_utc(@email.schedule_date)
- end