如何添加时区与我的时间戳?

问题描述:

我有时区为字符串(如“(GMT + 00:00)UTC”,“(GMT + 05:30)Chennai”等)。我还有时间戳星期一,2016年8月1日17:00:00 UTC +00:00。我需要根据时区更改时间戳记时间。时间戳中的时区也不应该改变。我使用rails 4.0.0。每一次尝试都会告诉字符串无法转换。任何人都可以请帮助。如何添加时区与我的时间戳?

+0

是做的时间段强从何而来?也许你可以使用由ActiveSupport :: TimeZone提供的名称列表来代替? – spickermann

首先,你需要从你的字符串中检索时区:

tz_as_string = "(GMT+05:30) Chennai" 
tz_name = tz_as_string[/(?<=\)).*/] # ⇒ "Chennai" 
tz_timezone = ActiveSupport::TimeZone::MAPPING[tz_name] #⇒ "Asia/Kolkata" 

,最后:

tz = ActiveSupport::TimeZone.new tz_timezone 
#⇒  #<ActiveSupport::TimeZone:0x000000107a91c0 @name="Asia/Kolkata", ... 
Time.parse('Mon, 01 Aug 2016 17:00:00 UTC +00:00').in_time_zone tz 
#⇒ Mon, 01 Aug 2016 22:30:00 IST +05:30