Django在同一个应用程序中的不同时区

时间:2017-11-06 10:50:28

标签: python django datetime django-models

我正在开发一个关于休假管理的Django应用程序,其中有来自不同国家的员工。我在创建休假时将时间数据存储到DB中。现在,我希望将此日期时间插入到DB中,作为该特定员工所在位置的当前本地时间。

例如,让我们假设X先生在印度工作,Y在Newyork工作。如果X申请休假,我希望它在当地时间创建(created_at = 它在印度的时间),当Y申请休假时,我希望它是created_at = 纽约的时间。截至目前,无论我插入数据库,它都只作为UTC时间插入。如何解决这个问题?

我正在努力实现这样的目标..但它始终是UTC。

userid = employees.objects.get(emp_id=request.user.username)

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')

 timezone.activate(pytz.timezone(tzone))
 tnow=timezone.localtime(timezone.now())

if request.POST['action'] == 'Save changes':
        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=tnow)

    new_leave.save()

非常需要帮助..... :(

提前致谢.........:)

1 个答案:

答案 0 :(得分:1)

Django在数据库中以UTC格式存储日期时间信息,在内部使用时区感知日期时间对象,并在模板和表单中将它们转换为最终用户的时区。

您可以在将时区保存到数据库之前将其设置为日期时间。

import pytz
from datetime import datatime

leave = leave.objects.get(pk=1)
time_zone = pytz.timezone('Asia/Calcutta') # set timezone here

# Before save
leave.start_date = time_zone.localize(datetime.now())
leave.save()

或者您可以将员工的时区存储在休假模型中,并在手动检索时将其转换。

import pytz

leave = leave.objects.get(pk=1)
time_zone = pytz.timezone(leave.timezone) # set timezone here

# OR on retrieval
leave_start_date = time_zone.localize(leave.start_date) # timezone aware datetime

<强>更新

PostgreSQL后端将日期时间存储为时区的时间戳。实际上,这意味着它会将日期时间从连接的时区转换为存储时的UTC,并在检索时从UTC转换为连接的时区。

  

有关详情,请查看official documentation下的。{3}}   迁移指南部分。