django一個匪夷所思的bug: 消失的時間?

來源:互聯網
上載者:User

 

今天同事告知, 在django中datetime.fromtimestamp(0)的時候, 竟然轉成了 (1970,1,1,7,0)! 而不是(1970,1,1,8,0).

經測試發現:

 

1. 在開發機上正常, 在生產機上才有這個問題

2. python shell 中正常,  manage.py shell 中出現問題

 

懷疑django初始化時候對datetime動過手腳, 搜了一遍代碼也沒看出個所以然來. 測著測著, 突然發現, 執行

datetime.datetime.fromtimestamp(time.time())

正常! 嘗試了一系列不同的時間戳記, 找到了一個G點

中間這一個小時哪去了? 回頭看, python shell中的資料正常.

估計time模組中的time.localtime也有這樣的問題, 實驗一下

嗯, 果然. 但是這消失的時間哪去了?

再實驗一下time.mktime轉下這時間

 

Overflow! 我勒個擦.......

現在只能估計是 django 與 環境之間的衝突, 但還不能完全定位bug.

暫時要求大家使用utcfromtimestamp再加8自己轉了.

========================================

後補:

找到一個http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result

裡面描述了正好在某個時間點處時區有更改導致1小時之差的問題.

我擦django還有這麼nb的功能, 趕緊google進行腦補, 我們設定的TIME_ZONE為 Asia/chongqing

最後發現

 

時間吻合, 眼淚嘩嘩的啊.....

想看時區狀況, 可去 http://www.timeanddate.com/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.