ixj*_*xje 8 python sqlite django-models django-timezone
我看到这篇文章是Django在将数据保存到数据库时会破坏时区感知的DateTimeField吗?但它专门使用pytz和mysql,而不是我不使用pytz并使用SQLite(因为它可能会产生影响).
我有以下型号
class ScheduleItem(models.Model):
work_date = models.DateTimeField('Work date')
Run Code Online (Sandbox Code Playgroud)
我插入数据如下:
from isoweek import Week
from dateutil import parser
from django.utils import timezone
def foo()
year = 2016 #hardcoded for example purpose
wknr = 2 #hardcoded for example purpose
dateObj = parser.parse(Week(year, wknr).day(0).isoformat() + " 00:00:00")
print(dateObj) # 2016-01-11 00:00:00 as expected
final = timezone.make_aware(dateObj)
print(final) # 2016-01-11 00:00:00+01:00 as expected
return final
workdate = foo()
si = ScheduleItem(work_date=workdate)
si.save()
Run Code Online (Sandbox Code Playgroud)
print语句给了我正确的输出,但是一旦我查看数据库(SQLite),我就看到了 2016-01-10 23:00:00
我的django设置说
TIME_ZONE = 'CET'
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)
检索我得到的数据:
datetime.datetime(2016, 1, 10, 23, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)
为什么它以我指定的另一种格式存储数据?为什么如果将Django设置为时区,我会得到一个UTC时区吗?我的意思是在插入之前,datetime对象说:datetime.datetime(2016, 1, 11, 0, 0, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)
更新 -
我在此期间通过设置找到一个变通TIME_ZONE的Django文档中描述的数据库上 这里.这使我在数据库中正确的时区/日期,但根据该文件我不应该需要它,因为我的数据库是由Django的管理
这允许与以当地时间而不是UTC存储日期时间的第三方数据库进行交互.为避免DST更改出现问题,不应为Django管理的数据库设置此选项.
它仍然不清楚我为什么Django的确实在数据库中存储时,将其转换为datetime对象与CET时区为UTC,但不够聪明检索时,其转换回CET.
Django 在内部使用 UTC 时间。TIME_ZONE将用于“您的视图和模型”(https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-TIME_ZONE)
你开始的是2016-01-11 00:00 CET,这是2016-01-10 23:00 UTC!您的日期时间已正确保存到数据库并稍后恢复,因此一切都按预期进行。
| 归档时间: |
|
| 查看次数: |
3555 次 |
| 最近记录: |