在夏令时方面,我无法理解 Rails 的时区支持。
我将所有数据库时间存储在UTC中。存储用户时区,以便它们直接映射回ActiveSupport::TimeZone
值(即Central Time (US & Canada)
)。
我想完全忽略夏令时。如果一个事件从开始,无论夏令时是否有效5:30pm
,它总是开始。5:30pm
考虑到所有时间都是统一存储的,是否有可能检索数据库时间并在本地显示它们,从而完全忽略夏令时?忽略夏令时会遇到什么问题吗?
在夏令时方面,我无法理解 Rails 的时区支持。
我将所有数据库时间存储在UTC中。存储用户时区,以便它们直接映射回ActiveSupport::TimeZone
值(即Central Time (US & Canada)
)。
我想完全忽略夏令时。如果一个事件从开始,无论夏令时是否有效5:30pm
,它总是开始。5:30pm
考虑到所有时间都是统一存储的,是否有可能检索数据库时间并在本地显示它们,从而完全忽略夏令时?忽略夏令时会遇到什么问题吗?
我并不是说听起来很迂腐,但是...
我想完全忽略夏令时。
好吧,那你就靠自己了。尽管我们抱有最大的希望和愿望,但现实世界的大部分时间都在使用夏令时。 你可以在这里快速入门。
如果事件在下午 5:30 开始,则无论夏令时是否有效,它总是在下午 5:30 开始。
5:30 给谁?如果您说的是世界标准时间 5:30,那么当然可以。但是,如果您说的是美国中部时间的 5:30,那么您必须将 DST 考虑在内。否则,半年的时间人们会在他们认为是 5:30 而你认为是 6:30 出现在你的活动中。
考虑到所有时间都是统一存储的,是否有可能检索数据库时间并在本地显示它们,从而完全忽略夏令时?
您将时间存储在 UTC 中,这很好。当您在本地显示它们时,您不应忽略DST。
忽略夏令时会遇到什么问题吗?
是的,人们通常不理解这一点。通常,如果您指的是当地时间,那么您的意思是对他们来说是当地的时间。如果您在该计算中不包括 DST,那么您将对您所谈论的时间产生分歧。
另一个忠告,您可能需要考虑使用TZInfo gem而不是ActiveSupport::TimeZone
. 然后,您将使用 IANA 标识符存储时区选择,例如America/Chicago
. 这些在 Rails 之外是可以识别的。
由于某些无法解释的原因,ActiveSupport 人员认为他们应该将时区限制为他们认为“有意义”的 146 个值。但是他们没有解释他们的过程,而且他们似乎没有在维护之上。 我问过为什么,但没有得到太多详细的答复。
您可能还希望查看时区标签 wiki。
Rails 会将您的日期/时间转换为应用程序配置的时区或用户时区(假设您已设置某种过滤器来使用 user.timezone);这将包括基于 DST 的操作。
您将需要覆盖此行为,并且可能有几个选项: