2014-02-27 87 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,但这是一个不同的问题。我感谢帮助!我正在努力解决我的问题,我将在稍后发布我的解决方案。 –