2014-02-27 111 views
2

我在Django中有一個名爲Data的模型,其中一個字段名爲time_last_updated。它被初始化如下:如何正確使用Django和Python格式化日期時間

time_last_updated=timezone.now() 

當我查詢數據庫(PostgreSQL的)手動,日期貌似2014-02-26 01:42:44.290443+00這是所有罰款,如我所料。問題是,當我把我的Data對象在Python Shell中,我得到這個:

>>> Data.objects.all[0].time_last_updated  
datetime.datetime(2014, 2, 26, 1, 42, 44, 290443, tzinfo=<UTC>) 

不過,如果我立即嘗試,並把這個結果直接回貝彷彿要創建一個datetime對象的形式,它,我在tzinfo之後的=處得到SyntaxError
Django如何返回一個語法無效的對象?

+1

它只是如何在控制檯上打印日期時間字段的值。 – alecxe

+0

我不確定你的意思。它如何返回有語法錯誤的對象? –

+0

抱歉不清楚。我的意思是它不應該用於創建日期時間對象。它只是一個'datetime'對象的字符串表示。 'Data.objects.all [0] .time_last_updated'仍然是'datetime'類型。 – alecxe

回答

5

實際上,當您在Python shell中打印datetime對象時,datetime將使用存儲在tzinfo中的對象的表示形式。
Django使用它的django.utils.timezone模塊來初始化日期,所以tzinfo屬性等於django.utils.timezone.utc(默認情況下,當你沒有指定任何時區時)。

當你正在尋找的__repr__utc你可以看到:

>>> from django.utils.timezone import utc 
>>> repr(utc) 
'<UTC>' 

因此,tzinfo=<UTC>。這是一個字符串表示,而不是真正的Python值。

+1

很好的解釋! – alecxe

+0

謝謝!實際上我的settings.py中有一個默認的時區,它的不是utc,但這是一個不同的問題。我感謝幫助!我正在努力解決我的問題,我將在稍後發佈我的解決方案。 –