我正在开发一个关于休假管理的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()
非常需要帮助..... :(
提前致谢.........:)
答案 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}} 迁移指南部分。