2017-10-21 49 views
0

settings.py的Django無法從UTC格式更改時區

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'Asia/Calcutta' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

models.py

class Mymodel(models.Model): 
    auto_increment_id = models.AutoField(primary_key=True) 
    datetime = models.DateTimeField(auto_now_add=True, blank=True) 
    ip_add = models.CharField(max_length=30) 
    data = models.TextField() 

我想提出一個POST請求我的網址,這通過我的視圖將數據存儲到數據庫(使用sqlite)。日期時間字段總是以UTC格式存儲時間(這是settings.py中TIME_ZONE變量的默認設置)

我已將TIME_ZONE更改爲'Asia/Calcutta;之後引用此鏈接:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

但仍然datetime正在以UTC格式存儲。在Google搜索這個問題後,我嘗試將USE_TZ更改爲False,但這對我無效。

我只是在python shell中查詢db中的數據。即

x = Mymodel() 

for i in range(len(x)): 
    print x[i].__dict__ 

請告知如何將時區更改爲'Asia/Calcutta'。

+0

你在Windows上運行你的Django服務器?如果是這樣,你的Windows時區設置爲「亞洲/加爾各答」? –

+0

在mac上運行。 – Ayush

回答

0

我嘗試過以下設置,它對我來說工作得很好。

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'Asia/Calcutta' 

USE_I18N = True 

USE_L10N = False 

USE_TZ = False 

需要USE_L10N設置爲False,格式本地化由此設置(適用於數字和日期)控制。

見下面鏈接:

https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/

1

我已經進行了一些測試,用我自己的模型(Django的v1.11.6),它似乎爲我工作。

嘗試做一些測試(Python的manage.py殼),如:

from MyApp.models import Mymodel 
testmodel = Mymodel(ip_add="something", data="something") 
testmodel.save() 
testmodel.datatime 

當USE_TZ啓用它具有tzinfo:

datetime.datetime(2017, 10, 21, 13, 43, 8, 718392, tzinfo=<UTC>) 

當USE_TZ被禁用,它沒有一個tzinfo:

datetime.datetime(2017, 10, 21, 15, 45, 25, 471765) 

我做了兩個這些測試在約。我當地時間15:45。

這是存儲在我的數據庫:

2017-10-21 13:43:08.718392 (with timezone enabled) 
2017-10-21 15:45:25.471765 (without timezone enabled) 

日期時間表列的類型是日期時間(6)

另一件事。你說你正在做一個POST。有關使用'auto_now_add'的文檔:「請注意,始終使用當前日期;它不僅僅是可以覆蓋的默認值,因此即使在創建對象時爲此字段設置了值,它也會被忽略」 。 (https://docs.djangoproject.com/en/1.11/ref/models/fields/

+0

好的,我在我的settings.py中設置了USE_TZ = False並重新啓動服務器。但仍然有新的記錄正在與UTC時區一起添加。除非我錯過了某些東西,否則不要認爲它對我有用。 – Ayush