我試圖從一個字串中決議一個時間戳,然后用它的縮寫時區顯示它,但是回傳的是與 UTC 的數字偏移量,盡管我認為這是正確的用法。這是控制臺會話:
[5] pry(main)> time_string = "2022-08-02T12:00:00 CDT"
=> "2022-08-02T12:00:00 CDT"
[6] pry(main)> DateTime.parse(time_string).zone
=> "-05:00"
[7] pry(main)> DateTime.parse(time_string).strftime("%Z")
=> "-05:00"
我在這里期待的是這將CDT再次回來。
這是 macOS 上的 Ruby 2.7,帶有 Rails:
? ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin21]
? rails --version
Rails 6.1.6
uj5u.com熱心網友回復:
從strftime docs for rails 說,它按預期作業。
Time zone:
%z - Time zone as hour and minute offset from UTC (e.g. 0900)
%:z - hour and minute offset from UTC with a colon (e.g. 09:00)
%::z - hour, minute and second offset from UTC (e.g. 09:00:00)
%:::z - hour, minute and second offset from UTC
(e.g. 09, 09:30, 09:30:30)
%Z - Equivalent to %:z (e.g. 09:00)
如果您有實際的時區名稱,您可以使用它來獲取博客文章中概述的縮寫
def human_timezone(time_string, timezone)
time = time_string.in_time_zone(timezone)
if time.zone.match?(/^\w/)
time.zone
else
time.formatted_offset
end
end
>> human_timezone('2019-03-28 16:00', 'Pacific Time (US & Canada)')
=> "PDT"
>> human_timezone('2019-03-28 16:00', 'Berlin')
=> "CET"
>> human_timezone('2019-05-01 16:00', 'Almaty')
=> " 06:00"
uj5u.com熱心網友回復:
Ruby 不存盤時區名稱,它只存盤時間偏移量(-5:00)。因此,向后轉換是不可能的,因為一個偏移量有多個時區。例如,偏移量為 -5:00 的另一個時區。
> time_string = "2022-08-02T12:00:00 PET"
=> "2022-08-02T12:00:00 PET"
> DateTime.parse time_string
=> Tue, 02 Aug 2022 12:00:00 -0500
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482391.html
下一篇:帶有前端引擎的Rails5API
