【问题标题】:Django: DateTimeField taking UTC format only, not othersDjango:DateTimeField 仅采用 UTC 格式,不采用其他格式
【发布时间】:2017-11-06 08:24:20
【问题描述】:

插入数据库的时间是默认的 UTC,而不是基于时区的时间。我不明白为什么会发生这种情况,即使我在查询中特别指定了我想要插入的时间.

在我的模型中我有

class leave(models.Model): 
    date_created = models.DateTimeField(auto_now_add=True)

在我的设置中

TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

在我看来,我是根据员工所在国家/地区设置时区

if employees.objects.get(emp_id=request.user.username).emp_loc == 'IND':
   tzone=pytz.timezone('Asia/Calcutta')
elif employees.objects.get(emp_id=request.user.username).emp_loc == 'MLA':
   tzone=pytz.timezone('Asia/Manila')
elif employees.objects.get(emp_id=request.user.username).emp_loc == 'MPLS':
   tzone=pytz.timezone('CST6CDT')

然后我根据国家/地区创建休假和更新时区

new_leave = leave.objects.create(employee=employees.objects.get(emp_id = userid.emp_id), start_date=sdt, end_date=edt, ltype=ltyp, message=des,date_created=datetime.now(tzone))
new_leave.save()

提前致谢。

【问题讨论】:

标签: python django datetime django-models


【解决方案1】:

您可以创建一个处理日期和时间转换的中间件, 导入pytz

from django.utils import timezone
from django.utils.deprecation import MiddlewareMixin

class TimezoneMiddleware(MiddlewareMixin):
    def process_request(self, request):
        tzname = request.session.get('django_timezone')
        if tzname:
            timezone.activate(pytz.timezone(tzname))
        else:
            timezone.deactivate()

然后您可以轻松地使用您之前指出的条件创建视图。 最好按照 Kevin 的建议阅读文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2016-10-25
    • 2020-01-02
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多