我很尴尬(并且感到震惊)我无法在SO或Google上找到一个好的答案,如果有的话,请随时指出我,但是......
我想要一个函数(理想情况下是纯ruby,但active_support解决方案没问题),其工作原理如下:
输入:一些合理格式的日期时间字符串(例如2016-12-25 12:00
)和时区。 不偏移量,但是时区,例如America/Chicago
或America/New_York
)。例如,
make_time_in_zone('2016-12-25 12:00', 'America/Chicago')
输出:表示确切时间点的Time
或DateTime
对象。也就是说,该功能应该使用时区来计算偏移和夏令时调整,以便您可以知道,例如,America/Chicago
在圣诞节中午到达时的UTC时间。
我知道我可以将时区设置为所需的时区,创建Time
对象,然后将时区设置回系统1,但我认为这是一个不可接受的解决方案,并且需要一个函数实际上支持这个用例。
答案 0 :(得分:3)
只需使用in_time_zone
来解析时区中的日期。您可以将时区作为参数传递。
in_time_zone(zone = ::Time.zone)
这将完全返回您想要的内容。
'2016-12-25 12:00'.in_time_zone('America/Chicago')
#=> Sun, 25 Dec 2016 12:00:00 CST -06:00
'2016-12-25 12:00'.in_time_zone('America/New_York')
#=> Sun, 25 Dec 2016 12:00:00 EST -05:00
答案 1 :(得分:2)
Rails将当前区域存储在当前线程中,因此最正确的方法是设置区域进行解析。像
这样的东西var count = 0, string = "Goodbye";
string.split('').forEach(function(){
count++;
});
console.log(count);
还有更多“hackish”方式,但它不是来自公共API。
Time.use_zone('America/Chicago') { Time.zone.parse('2016-12-25 12:00')}