rails中使用tzinfo-timezone实现各时区时间转换

结合 http://marklunds.com/articles/one/311
和手册,完整的一个实现各时区时间转换的一个例子:

首先保证服务器安装tzinfo插件

 gem install  tzinfo

1、配置环境
 
ruby 代码
 
  1. ActiveRecord::Base.default_timezone = :utc   

2、相应的类中
ruby 代码
  1. require 'tzinfo'  

3、某模型中有一个字段为time_zone,string类型,用来存储用户设置的他所在的时区
ruby 代码
 
  1. class User < ActiveRecord::Base  
  2.   composed_of :tz:class_name => 'TZInfo::Timezone',   
  3.               :mapping => %w(time_zone name)
  4. #回调函数对tz进行赋值
  5. def after_find
       self.tz=TZInfo::Timezone.new(self.time_zone)
  6. end
  7. end  

4、新建用户时,使用下面select
ruby 代码
 
  1. <%= time_zone_select 'user', 'timezone_name', TZInfo::Timezone.all.sort, 
  2.    :model => TZInfo::Timezone %>  

5、新建action中
ruby 代码
 
  1. @user.tz=TZInfo::Timezone.new(params[:user][:timezone_name])  

6、相应的helper中
ruby 代码
 
  1. def format_datetime(datetime)  
  2.    return datetime if !datetime.respond_to?(:strftime)  
  3.    datetime = @user.tz.utc_to_local(datetime) if @user  
  4.    datetime.strftime("%m-%d-%Y %I:%M %p")  
  5.  end  

7、相应的view中得到本地时间
ruby 代码
 
  1. <%= format_datetime(Time.now) %>  

8、action中转换时间
ruby 代码
 
  1. def new  
  2.  @email.schedule_date = @user.tz.utc_to_local(Time.now) # Default schedule date in local time  
  3. end  
  4. def create  
  5. @email.schedule_date = @user.tz.local_to_utc(@email.schedule_date)  
  6. end  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值