在 Rails 中,如何以可与 ActiveSupport::TimeZone[zone].parse() 一起使用的格式获取当前时区 (Time.zone)?

Posted

技术标签:

【中文标题】在 Rails 中,如何以可与 ActiveSupport::TimeZone[zone].parse() 一起使用的格式获取当前时区 (Time.zone)?【英文标题】:In Rails, how get current time zone (Time.zone) in a format that can be used with ActiveSupport::TimeZone[zone].parse()? 【发布时间】:2012-12-02 23:36:27 【问题描述】:

方法如何获取当前 Time.zone 并将其转换为ActiveSupport::TimeZone[some_zone].parse() 可以使用的格式?

Time.zone.to_s 返回的字符串好像很奇怪,不能和ActiveSupport::TimeZone[zone].parse()一起使用

Time.zone.to_s 返回"(GMT-08:00) Pacific Time (US & Canada)"

但是ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]nil

ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]
=> nil

ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
=> (GMT-08:00) Pacific Time (US & Canada)

【问题讨论】:

【参考方案1】:

使用Time.zone.name,而不是Time.zone.to_s

[1] pry(main)> Time.zone.to_s
=> "(GMT-05:00) Eastern Time (US & Canada)"
[2] pry(main)> Time.zone.name
=> "Eastern Time (US & Canada)"
[3] pry(main)> ActiveSupport::TimeZone[Time.zone.name]
=> (GMT-05:00) Eastern Time (US & Canada)

至于我是如何得到这个(根据要求),我只知道Time.zone 上存在name 方法。如果我不知道这一点,我会检查文档。如果它不像你说的那样在里面(确实是,here,我通常用 Pry 检查类/模块/对象强>。 Pry 是 irb 的替代品,可以让我做类似的事情

[1] pry(main)> cd Time.zone
[2] pry(#<ActiveSupport::TimeZone>):1> ls -m
Comparable#methods: <  <=  ==  >  >=  between?
ActiveSupport::TimeZone#methods: <=>  =~  at  formatted_offset  local  local_to_utc  name  now  parse  period_for_local  period_for_utc  to_s  today  tzinfo  utc_offset  utc_to_local
self.methods: __pry__
[3] pry(#<ActiveSupport::TimeZone>):1> name
=> "Eastern Time (US & Canada)"

ls -m 在上面的[2] 行上打印对象上的方法(如果你向右滚动,你会看到name 列在那里)。你可以在[3] 中看到我可以直接在我所在的Time.zone 对象上调用name 并获得你正在寻找的输出。

【讨论】:

太棒了,谢谢...查看了文档,从未见过。很想知道,你是怎么找到这种东西的? 顺便说一句,他们确实在api.rubyonrails.org/classes/ActiveSupport/TimeZone.html 的文档中包含了一个使用“名称”的示例,但是它们在列出的“方法”中不包含“名称”,“N”有“新”和“现在”而不是“名字”,这就是我错过它的原因

以上是关于在 Rails 中,如何以可与 ActiveSupport::TimeZone[zone].parse() 一起使用的格式获取当前时区 (Time.zone)?的主要内容,如果未能解决你的问题,请参考以下文章

如何以可移植的方式在 C 中执行算术右移?

如何在odoo(版本8到15)中以可编辑模式隐藏字段

在 Swift 5 中,如何以可读的方式(使用整数)显示从 range.UpperBound 或 range.LowerBound 返回的原始位?

如何在 C 中以可移植的方式管理内存对齐和通用指针算法?

如何以可移植的方式创建流程?

如何使返回类型以可选参数为条件