如何將格式'2009-02-02 00:00:00'的 UTC 時間戳轉換為 Ruby 中的 EST/EDT?請注意,我沒有使用 Rails,而是一個簡單的 Ruby 腳本。
1如果日期范圍介于美國東部標準時間(通常是 1 月至 3 月中旬)之間,則需要 UTC-5 小時。對于 EDT,它是 UTC-4 小時。
到目前為止,我有以下功能可以將 UTC 轉換為 EST/EDT。
def utc_to_eastern(utc)
eastern = Time.parse(utc) # 2009-02-02 00:00:00 -0500
offset_num = eastern.to_s.split(" -")[1][1].to_i # 5
eastern_without_offset = (eastern-offset_num*60*60).strftime("%F %T") # 2009-02-01 19:00:00
return eastern_without_offset
end
puts utc_to_eastern("2009-02-02 00:00:00") # 2009-02-01 19:00:00
puts utc_to_eastern("2009-04-02 00:00:00") # 2009-04-01 20:00:00
上面的代碼做了我想要的,但是我的解決方案有兩個問題:
- 我不想重新發明輪子,這意味著我不想撰寫時間轉換功能,而是使用 Ruby 提供的現有方法。有沒有更直觀的方法來做到這一點?
- 決議使用我的本地時區將 UTC 轉換為 EST/EDT,但是我想明確定義時區轉換(“America/New_York”)。因為這意味著在中央時間的機器上運行它的人不會使用 EST/EDT。
uj5u.com熱心網友回復:
最好的方法是使用TZInfo。
require 'tzinfo'
require 'time'
def utc_to_eastern utc
tz = TZInfo::Timezone.get("America/New_York")
tz.to_local(Time.parse(utc)).strftime('%Y-%m-%d %H:%M:%S')
end
utc_to_eastern "2020-02-02 00:00:00 UTC" => "2020-02-01 19:00:00"
utc_to_eastern "2020-04-02 00:00:00 UTC" => "2020-04-01 20:00:00"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452720.html
