2015-10-29 62 views
0

我可以通过时区名称或缩写来Time.new。 我所有的工作与抵消,但我需要时区,如太平洋标准时间,格林威治标准时间等等将时区名称传递给Time.new

请看下面我简单的代码。

以下是工作已经

Time.new(year, month, day, hr, min, sec, utc_offset) 

我想是以下工作。

Time.new(year, month, day, hr, min, sec, timezone_name/abbreviation) 

任何帮助,高度赞赏。

+0

小心 - 时区中的缩写可能不明确。例如,CST有5种不同的解释。是“中央标准时间”,“中国标准时间”等...查看[维基百科列表](https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations)以获取更多示例。 –

+0

@MattJohnson非常有用的评论感谢。但我只使用us_zones。但是,你是对的。我想我应该存储完整的时区名称。 – AMBasra

回答

0

你可以使用这个

Time.use_zone('Dublin') { 
    # Time.now.... 
} 

例子:

Time.use_zone('St. Petersburg') { DateTime.current } 

周四,2015年10月29日17时24分四十零秒+0300

Time.use_zone('Berlin') { DateTime.current } 

周四,2015年10月29日15时24分59秒+0100

对于一些详细信息,看看在API(http://apidock.com/rails/Time/use_zone/class

更新: 可以提取所有实时信息到一个数组:

Time.now.to_a 

[20,42,如图9所示,30,10,2015,5,303,假, “CET”]

+0

我基本上想要存储TimeZone。类似星期四,2015年10月29日15:24:59 +0100 PST – AMBasra

+0

@AMBasra我更新了我的回答 – rob

+0

在以下情况下失败 2.2.2:074> Time.now.in_time_zone(“Indiana(East)”)to_a => [38,34,12,30,10,2015,5303,真,“EDT”] 2.2.2:075> Time.now_time_zone(“Eastern Time(US&Canada)”)。 to_a => [57,34,12,30,10,2015,5,303,true,“EDT”] – AMBasra

相关问题