UTC 為協(xié)調(diào)世界時(shí)洋机。
其中東西十二區(qū)各站7.5度赡译。
UTC 與當(dāng)?shù)貢r(shí)間轉(zhuǎn)換 在東時(shí)區(qū)UTC時(shí)間 加上所在時(shí)區(qū)時(shí)差, 在西時(shí)區(qū) UTC時(shí)間減去相應(yīng)的時(shí)區(qū)時(shí)差
默認(rèn)情況下 rails 存取時(shí)間都會(huì)轉(zhuǎn)換為UTC時(shí)間。
config.time_zone 設(shè)置應(yīng)用的時(shí)區(qū)领舰,ActiveRecord 取時(shí)間時(shí)根據(jù)這個(gè)設(shè)置自動(dòng)轉(zhuǎn)換
config.active_record.default_timezone = :local rails 往數(shù)據(jù)庫(kù)存時(shí)間時(shí)根據(jù)time_zone配置的時(shí)區(qū)存時(shí)間。
default_timezone應(yīng)該和time_zone一起使用并且time_zone應(yīng)該在default_timezone前面迟螺。
注意在rails console 中 顯示Model Object的時(shí)候 時(shí)間調(diào)用了 TimeWithZone#to_s(:db)冲秽,此時(shí)顯示的是utc時(shí)間,不一定是數(shù)據(jù)庫(kù)存儲(chǔ)的時(shí)間矩父★鄙#可以使用pry-rails
def to_s(format = :default)
if format == :db
utc.to_s(format)
elsif formatter = ::Time::DATE_FORMATS[format]
formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
else
"#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby Time#to_s format
end
end
建議:
在往數(shù)據(jù)庫(kù)存數(shù)據(jù)的時(shí)候default_timezone使用UTC,time_zone根據(jù)情況設(shè)置窍株。
因?yàn)榇娴氖荱TC時(shí)間在以后更方便轉(zhuǎn)換成任意時(shí)區(qū)民轴,尤其是系統(tǒng)面向多個(gè)時(shí)區(qū)時(shí),在向別的系統(tǒng)提供數(shù)據(jù)時(shí)也更方便球订。
Rails 中的時(shí)區(qū)及時(shí)間問題
關(guān)于 Rails 中奇怪的時(shí)區(qū)問題