datetime.now()在Django应用程序中返回错误的一天

时间:2015-04-10 01:55:35

标签: python django

我的Django应用程序(nginx,uwsgi堆栈)通过调用datetime.now()来请求当天:

def get_drinks(request, drink_type):
    current_day = datetime.today().strftime("%w")
    current_day_string = datetime.today().strftime("%A")

我在我的网站上显示当天。由于一些奇怪的原因,它将在周五返回,而不是周四(今天)。我的服务器时间是:

server:~$ date
Thu Apr  9 18:51:02 PDT 2015

当我在python shell中运行datetime.now()时,我也得到星期四:

>>> import datetime
>>> datetime.datetime.today().strftime("%A")
'Thursday'

这里的问题是什么?

2 个答案:

答案 0 :(得分:8)

datetime.datetime.now()不知道时区,因此获取系统本地时区的当前时间。您应该在settings.py文件中将TIME_ZONE设置为America/Los_Angeles(PST / PDT)并将USE_TZ设置为True,以便在您的应用程序中创建的所有日期值始终是时区感知的只要您从django.utils.timezone导入。

有关详细信息,请参阅timezone文档。

TIME_ZONE = "America/Los_Angeles"
USE_TZ = True

>>> from django.utils import timezone

>>> print timezone.now()
datetime.datetime(2015, 4, 10, 2, 17, 10, 839067, tzinfo=<UTC>)

>>> print timezone.localtime(timezone.now())
datetime.datetime(2015, 4, 9, 19, 17, 10, 839067, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>)

答案 1 :(得分:1)

您应该更改Django的区域设置。

这是针对同一问题的另一个问题和答案。

System date formatting not picking up django locale