這個以前沒系統處理過,感覺前端頁面顯示正常,就ok。
但有的不重要的地方,顯示有8小時錯亂,也沒有列入優先順序處理。
昨天下細看了一些網上文件,找取了解決思路。
具體到django+mysql來說:
會關係到mysql的作業系統時區(mysql會讀取這個設定,形成system_time_zone) system_time_zone | cst,
mysql的時區: time_zone +00:00
django框架的四個設定:
time_zone = 'asia/shanghai'use_i18n = true
use_l10n = true
use_tz = true
show variables like作業系統輸出:'%time_zone%';
select
now();
set time_zone=
'+00:00';
set time_zone=
'system
';
# date在此先說明一下,我所用的資料庫時 cst 時區,與所在的伺服器系統時間一致,django 所在的 web 伺服器也是統一臺機器。在之前使用的過程中,從 django 中獲取到的 localtime 儲存到資料庫時會被系統自動處理增加8小時。針對這一問題,蒐集了各方面的資料。下面就對 django 的時區機制作個解釋。fri aug
1010:46:56 cst 2018
其實,django 在配置檔案 settings.py 中對時間時區有影響的是兩個引數,乙個是 time_zone,另乙個是 use_tz。根據use_tz 官網文件中的描述,這一屬性預設值是 false。如果設定為 ture,django 內部將會使用對時區敏感的時間,否則 django 將會使用系統本地的原有時間。(注意:為了方便,由 django-admin.py startproject 建立而來的專案 settings.py 中此項值設定為了 ture)
與這一屬性相關的還有 time_zone, use_i18n 和 use_l10n,下面我們來看一下這幾個屬性。
time_zone 官方文件中說,在 django 1.4 以後的版本中,這一屬性值的意義是由 use_tz 決定的。這並不是伺服器必須的,因為乙個伺服器可以服務多個 django 框架的服務,並擁有各自的時區。
首先說明一點,在開啟了 django 所有關於時區的設定之後,本來以為 django 將會以 utc 標準時區連線資料庫,但是經筆者測試(在 django 中引入 django.db.connection 連線做查詢)發現實際連線的時區是資料庫系統的全域性設定。確認這一點十分關鍵,因為它事關全部時間資料的時區問題。
如下是做的一些測試以說明問題。
操作引數
情形1情形2
情形3情形4
情形5django settings.py
time_zone
asia/shanghai
asia/shanghai
asia/shanghai
asia/shanghai
asia/shanghai
use_i18n
true
true
true
true
true
use_l10n
true
true
true
true
true
use_tz
true
false
false
true
false
datetime_format
y-m-j h:i:s z
y-m-j h:i:s z
y-m-j h:i:s z
y-m-j h:i:s z
y-m-j h:i:s z
database time_zone
system_time_zone
china standard time
china standard time
china standard time
china standard time
china standard time
time_zone
system
system
+00:00
+00:00
+00:00
存入time.strftime('%y-%m-%d %x', time.gmtime()) or time.strftime('%y-%m-%d %x', time.localtime())
2014-08-27 23:43:19+08:00
2014-08-27 23:45:27
2014-08-27 15:48:56
2014-08-27 15:50:49+00:00
2014-08-27 15:50:49+00:00
在資料庫中查詢set time_zone = '+00:00'
datetime
2014-08-27 15:43:19
2014-08-27 23:45:27
2014-08-27 15:48:56
2014-08-27 15:50:49
2014-08-27 15:50:49
timestamp
2014-08-27 07:43:19
2014-08-27 15:45:27
2014-08-27 15:48:56
2014-08-27 15:50:49
2014-08-27 15:50:49
在 django 中讀取
datetime
2014-08-27 15:43:19+00:00
2014-08-27 23:45:27
2014-08-27 15:48:56
2014-08-27 15:50:49+00:00
2014-08-27 15:50:49
timestamp
2014-08-27 15:43:19
2014-08-27 23:45:27
2014-08-27 15:48:56
2014-08-27 15:50:49
2014-08-27 15:50:49
在 template 中顯示
datetime
2014-8-27 23:43:19 28800
2014-8-27 23:45:27 28800
2014-8-27 15:48:56 28800
2014-8-27 23:50:49 28800
2014-8-27 15:50:49 28800
timestamp
2014-8-27 15:43:19 28800
2014-8-27 23:45:27 28800
2014-8-27 15:48:56 28800
2014-8-27 15:50:49 28800
2014-8-27 15:50:49 28800
由此可見,使用情形4的配置,設定 use_tz = ture,資料庫 time_zone = '+00:00',時間設定為 time.strftime('%y-%m-%d %x', time.gmtime()),可以加時區 '+00:00'(資料庫不會關心),在資料庫中採用 datetime 型別儲存最為合適。
django專案中有多個應用時如何整理和配置
3.在專案setting.py檔案中增加如下配置 import sys5.在專案的urls.py檔案中也可以直接寫 urlpatterns url r user include user.urls namespace user 使用者模組 url r cart include cart.urls n...
js中for迴圈和splice合用
在js中對陣列的處理是司空見慣的,現在想要刪除陣列中choiceflag為1的元素,可以這樣做。for var i 0 i scope.macco.items.length i 這裡的神奇之處就是合理使用splice函式,下面是對splice的介紹 splice 方法向 從陣列中新增 刪除專案,然後...
django使用mysql和MongoDB的配置
今天整理了一下在django專案中如何使用mongodb,環境如下 ubuntu18.04,django2.0.5,drf3.9,mongoengine0.16 第一步 在settings.py中配置mongodb和mysql,配置如下 可以同時使用mysql和mongodb databases m...