获取Djang的本地系统时间

2024-05-08 18:52:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有什么方法可以让我得到一个日期时间对象,它正好有系统时间,而忽略任何其他时区魔术?


Tags: django用户py数据库应用程序datetimesettingsuse
2条回答

您需要使用django.utils.timezone,特别是:

from django.utils.timezone import localtime, now

# get now datetime based upon django settings.py TZ_INFO
localtime(now())

来自django docs

How do I interact with a database that stores datetimes in local time?

Set the TIME_ZONE option to the appropriate time zone for this database in the DATABASES setting.

This is useful for connecting to a database that doesn’t support time zones and that isn’t managed by Django when USE_TZ is True.

设置USE_TZ=True以便django在内部使用时区感知的datetime对象。

DATABASES设置中设置TIME_ZONE,以容纳旧数据库。Django将自动将您的日期时间转换为相应的时区,即,要获得当前时间,它就足够了:

from django.utils import timezone

now = timezone.now()

注意:datetime.now()返回一个原始的datetime对象。别用它。

相关问题 更多 >