資料庫訪問時區問題

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

今天是第二次跳進這個坑裡面。

我要做的介面有一個需求,就是根據設定好的開始時間和結束時間過濾掉未開始和到期的內容。我用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團隊呢?哈哈哈

原文連結:資料庫訪問時區問題,轉載請註明來源!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.