【发布时间】:2017-04-04 10:35:10
【问题描述】:
我很尴尬(也很震惊)我无法在 SO 或 google 上找到一个好的答案,如果有的话,请随时给我指出一个 dup,但是......
我想要一个像这样工作的函数(理想情况下是纯 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 对象,然后将时区设置回系统时区,但我认为这是一个不可接受的解决方案,并且想要一个实际支持的功能这个用例。
【问题讨论】:
-
看看这是否对你有用:stackoverflow.com/questions/34175813/…
-
不完全。
in_time_zone做另一个方向:取一个确切的时间点,并告诉你它在某个时区的日期和时间。四舍五入到午夜并添加技巧也不总是有效,(至少在一般情况下),因为根据区域和时间,in_time_zone可以让你前进或后退一天 -
仍然不清楚你想要什么。 “......这样你就可以知道,例如,在美国/芝加哥的圣诞节中午几点钟”。你的意思是在UTC?因为在美国/芝加哥的圣诞节中午是中午。不是要成为一个聪明的驴子,真的不明白你想要什么。
-
"你的意思是 UTC 吗?" - 实际上,是的,这就是我要问的。我给你一个日期、时间和区域,你给我一个 UTC 时间戳。我只是在转换为 ruby
Time对象方面对其进行了介绍,但它是一回事。 -
in_time_zone 也会使您向后或向前移动一天,因为这是时区的工作方式。西雅图的 21:00 是格林威治的 05:00。但在西雅图是 11/20,在格林威治是 11/21。所以不清楚你说的向后或向前一天是什么意思。
标签: ruby-on-rails ruby