這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
今天是第二次跳進這個坑裡面。
我要做的介面有一個需求,就是根據設定好的開始時間和結束時間過濾掉未開始和到期的內容。我用xorm
作為ORM引擎進行資料庫開發。直接一條解決了問題。當時還大概測了一下,沒有任何問題。
Where("displayorder<>0 AND effectivetime< ? AND expirationtime> ?", time.Now(), time.Now())
今天iOS開發要調用我的介面開發,因為我寫的測試資料不完整,他叫測試配了幾條測試資料。測試妹子很專業的,加了一條到期的,一條要顯示的,一條未開始的,然後我這三條一條都沒展示。。。
問題報給我之後,很明顯就知道問題出在哪裡了。肯定是那個Where查詢錯了。xorm支援記錄SQL語句日誌,一開始開發我就配置上了。果斷去看日誌。把SQL複製到Navicat裡面運行,發現沒有任何問題。。。這就邪了。百思不得其解。我就開始瞎猜。是不是傳入的time.Now()有問題。我就把日期格式化了一下,可以了。
const DATE_LAYOUT = "2006-01-02 15:04:05"now := time.Now()now_str := now.Format(DATE_LAYOUT)
這一次歪打正著讓我覺得很不對勁(我的直覺還是很準確的!!!),然後就去請教了一下我萬能的大哥,他說應該是UTC的問題。意思就是時區的問題,我才恍然大悟,之前我也踩過這個坑。在MySQL連接字串裡面加上時區資訊就可以了。
parseTime=true&loc=Asia%2FChongqing
最後,我萬能的大哥還告訴我,根本不需要傳時間進去,直接使用MySQL的函數NOW()
就可以了。嗯,大哥就是大哥。。。
Where("displayorder<>0 AND effectivetime< NOW() AND expirationtime> NOW()")
我團的Ruby團隊據說是國內比較牛逼的Ruby團隊了,因為主站一直用Ruby做開發的。我們Team只有5個人,選用了Golang作為主力開發語言,Golang又比較新,我們Team會不會成為國內比較牛逼的Golang團隊呢?哈哈哈
原文連結:資料庫訪問時區問題,轉載請註明來源!