在Django获取本地系统时间

时间:2016-03-15 23:09:55

标签: python django datetime

我有一个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'

我是否有某种方法可以获得具有完全系统时间的日期时间对象,忽略任何其他时区魔法?

2 个答案:

答案 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()返回一个天真的日期时间对象。不要使用它。