【问题标题】:How to convert timezone name to shortname in ruby如何在 ruby​​ 中将时区名称转换为短名称
【发布时间】:2012-09-15 06:18:24
【问题描述】:

有没有办法在 ruby​​ 中将“America/Los_Angeles”等时区转换为时区短名称“PDT”?

【问题讨论】:

    标签: ruby timezone


    【解决方案1】:

    缩写通常是上下文相关的 - 因此“PDT”仅适用于夏令时运行时

    根据the documentation判断,如果你用strftime格式化Time并使用%Z的格式字符串,你应该得到时区缩写。

    我个人不喜欢使用缩写词,因为它们模棱两可并且会引起很多混乱。 (例如,我看到人们全年都在使用“PST”,例如,指的是“7/20/2012 9:00 PST”——一个没有意义的日期/时间。)不过那是另一回事 :)

    【讨论】:

    • 如果它只在夏令时工作,那么它不会满足我的应用程序要求。谢谢!
    • 值得注意的是,此方法将返回缩写,但不会区分澳大利亚的冲突缩写。例如,阿德莱德位于澳大利亚的“CST”时区,与北美使用的“CST”相冲突,这可能会根据所使用的技术堆栈(PostgreSQL 就是其中之一)让您感到困惑。
    • @douglasr:确实如此——因此“鉴于他们是模棱两可的”位。
    • @JonSkeet:不知何故,我完全错过了那句话。对此感到抱歉。
    【解决方案2】:

    更明确的答案:

    Time.now.in_time_zone("America/Los_Angeles").strftime('%Z')
    

    【讨论】:

    • 在以下场景中失败 2.2.2 :059 > Time.now.in_time_zone("Indiana (East)").strftime('%Z') => "EDT" 2.2.2 :060 > Time.now.in_time_zone("东部时间(美国和加拿大)").strftime('%Z') => "EDT"
    • 奇怪。你确定这不是 Rails 的错误吗?
    • 我不能说它是否是一个错误。发生的事情是它在日光节约的情况下失败了。所以它是否失败也值得商榷。 Ruby 使用 utc_offset 来告诉我们它是什么时区。我会说它是否失败取决于美国使用的标准。如果他们在夏令时使用印第安纳州(东部)的 EDT,那么这不是错误,但如果他们在夏令时和正常日子都使用 EST,那就失败了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多