我有一个Django应用程序,可以与其他旧数据库进行大量交互。这些其他数据库都使用本地时间,而不是UTC。我理解Django的时区支持以及除了与用户交互之外总是使用UTC时间的建议。在这种情况下,我真的只需要Django给我系统日期/时间。
在settings.py中我有
USE_TZ = False
当我从linux命令行运行date
时(例如):
Tue Mar 15 17:03:42 MDT 2016
当我打开常规(非django)python shell并运行
时import datetime
str(datetime.datetime.now())
我得到了
'2016-03-15 17:04:55.182283'
但是当我从Django shell (python manage.py shell)
运行相同的命令时,我会在一小时前得到一个时间:
'2016-03-15 16:07:10.949269'
我是否有某种方法可以获得具有完全系统时间的日期时间对象,忽略任何其他时区魔法?
答案 0 :(得分:8)
您希望使用django.utils.timezone
,具体为:
from django.utils.timezone import localtime, now
# get now datetime based upon django settings.py TZ_INFO
localtime(now())
答案 1 :(得分:0)
来自django docs:
如何与以当地时间存储日期时间的数据库进行交互?
将TIME_ZONE选项设置为适当的时区 数据库在DATABASES设置中。
这对于连接到不支持时间的数据库非常有用 区域,当USE_TZ为True时,不由Django管理。
设置USE_TZ=True
以便django在内部使用时区感知日期时间对象。
在TIME_ZONE
设置中设置DATABASES
,以容纳旧数据库。 Django会自动将您的日期时间转换为适当的时区,即获得当前时间就足够了:
from django.utils import timezone
now = timezone.now()
注意:datetime.now()
返回一个天真的日期时间对象。不要使用它。