gpt4 book ai didi

mysql - Ruby 时区 — 到 UTC 和返回

转载 作者:行者123 更新时间:2023-11-30 22:26:30 26 4
gpt4 key购买 nike

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

我在 Ruby 上运行网站(使用 Puma/Sinatra),但没有 Rails,我想远离 Rails。前端有HTML/ERB/JS,后端有MYSQL。

我认为简单地添加/减去 UTC 偏移量将解决所有问题。我有一个简单的列表,里面有 TIMEZONE <--> UTCOFFSET这非常有效——至少我是这么认为的。

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

夏季的维也纳:UTC 时差:+2h

冬天的维也纳:UTC 时差:+1h

是否有一种简单的方法可以为 Ruby(而非 Rails)提供“时区 ID”并接收正确调整后的 UTC 偏移量?

喜欢:

user.timezone = "Europe/Vienna"
utc_adjusted_time = post.local_time.to_i + get_utc_offset(user.timezone)

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

我浏览了 IANA 数据库(这绝对是矫枉过正),我在 Github 上搜索了许多 Gists,我试图滥用 Rails 似乎拥有的任何东西,但没有走得太远。

你们是怎么处理的?理想情况下,如前所述,每个帖子都将被转换并保存为 DST 剥离的 UTC 时间。谢谢!

最佳答案

只需使用 Ruby TZInfo gem .

您的用例与显示的完全一样 in the readme :

require 'tzinfo'

tz = TZInfo::Timezone.get('America/New_York')
local = tz.utc_to_local(Time.utc(2005,8,29,15,35,0))

utc = tz.local_to_utc(local)

period = tz.period_for_utc(Time.utc(2005,8,29,15,35,0))
id = period.zone_identifier

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

period.offset
period.dst?

...等等

仅供引用 - Rails 时区支持无论如何都基于这个 gem。然后 Rails 将一些时髦的别名放在顶部(我建议不要使用)。请参阅 the timezone tag wiki 中有关 Rails 的部分.

关于mysql - Ruby 时区 — 到 UTC 和返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35067636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com