Mysql 红宝石时区&x2014;往返UTC

Mysql 红宝石时区&x2014;往返UTC,mysql,ruby,timezone,dst,Mysql,Ruby,Timezone,Dst,我运行一个调度站点,允许用户为他们的帐户设置时区。然后,他们可以在日历上为该时区安排“发布”。在后端,我将时间转换为UTC时间(工作人员在UTC时间处理和接收这些帖子) 我在Ruby上运行这个站点(有Puma/Sinatra),但是没有Rails,我想远离Rails。前面是HTML/ERB/JS,后面是MYSQL 我认为简单地加/减UTC偏移量就能解决所有问题。我有一个简单的列表,上面有时区UTCOFFSET,它运行得非常好——或者我是这么想的 然后我意识到,当给定的时区(或地点)当前处于DST

我运行一个调度站点,允许用户为他们的帐户设置时区。然后,他们可以在日历上为该时区安排“发布”。在后端,我将时间转换为UTC时间(工作人员在UTC时间处理和接收这些帖子)

我在Ruby上运行这个站点(有Puma/Sinatra),但是没有Rails,我想远离Rails。前面是HTML/ERB/JS,后面是MYSQL

我认为简单地加/减UTC偏移量就能解决所有问题。我有一个简单的列表,上面有
时区UTCOFFSET
,它运行得非常好——或者我是这么想的

然后我意识到,当给定的时区(或地点)当前处于DST时,这不起作用

夏季维也纳:UTC偏移量:+2h

冬季维也纳:UTC偏移量:+1h

有没有一种简单的方法可以给Ruby(而不是Rails)一个“时区ID”并接收回正确的调整UTC偏移量

比如:

其中
get_utc_offset
知道它是否在DST中。有什么想法吗

我浏览过IANA数据库(这绝对是过火了),我在Github上搜索过无数GIST,我试图滥用Rails似乎有的东西,但没有走多远

你们是怎么处理的?理想情况下,如前所述,每篇文章都将转换并保存为一个DST格式的UTC时间。谢谢

只要用红宝石就行了

您的用例正是所示的用例:

查看文档,您可以看到您询问的其他信息:

period.offset
period.dst?
。。。等等

仅供参考-Rails时区支持无论如何都基于此gem。然后Rails在顶部添加了一些时髦的别名(我建议不要使用)。请参阅中有关Rails的部分。

只需使用Ruby即可

您的用例正是所示的用例:

查看文档,您可以看到您询问的其他信息:

period.offset
period.dst?
。。。等等


仅供参考-Rails时区支持无论如何都基于此gem。然后Rails在顶部添加了一些时髦的别名(我建议不要使用)。请参阅中的Rails部分。

获取utc\u偏移量
需要知道它是否在本地时间的DST中。目前还没有。基本上,您需要一个适当的时区类,例如-但看起来它来自Rails。(我不是一个喜欢使用Ruby的人,所以可能对你能使用什么有一些天真的假设)。请注意,如果本地时间在DST转换前后,则本地到UTC的映射可能不可能或不明确。(例如,向前弹跳时,1:30am可能根本不存在;向后弹跳时,1:30am可能出现两次)。你需要找出你想要的行为。你可能还想考虑存储时区和本地时间,而不是UTC,记住规则可以随着时间的推移而改变。当您的计划事件发生时,如果您继续存储UTC,用户最初指定的时间可能不是本地时间。Offtopic:Ruby 1.6发行说明包含Matz的commit注释:@JonSkeet时间不明确的奇怪情况很可能是一个边缘情况,我现在不支持(99.99%的职位在工作时间内)-关于存储原始时间/时区-是的,我也这样做,只是没有提到它。在我的应用程序中使用这个很好,运行得很好。希望这有帮助。
get_utc_offset
需要知道它是否在本地时间的DST中。不是现在。基本上,你需要一个适当的时区类,例如。-但这是很重要的OK,就像来自Rails一样。(我不是Ruby的人,所以可能对您可以使用的东西有一些天真的假设)。请注意,如果本地时间在DST转换前后,本地到UTC的映射可能不可能或不明确。(例如,向前跳时,1:30am可能根本不存在;向后退时,1:30am可能发生两次)您可能需要考虑您的期望行为。您可能还想考虑存储时区和本地时间,而不是UTC,记住规则可以随着时间的推移而改变……在您计划的事件发生时,如果您继续存储UTC.Objuts:Ruby 1.6 Read,则它可能不在用户最初指定的本地时间。ease notes包含Matz的commit评论:@JonSkeet时间不明确的奇怪情况很可能是一个边缘情况,我愿意妥协,暂时不支持(99.99%的帖子在工作时间内)-关于存储原始时区-是的,我也这么做,只是没有提到。在我的应用程序中使用了这个,运行得很好。希望这有帮助。
period.offset
period.dst?