【发布时间】:2018-12-17 10:08:21
【问题描述】:
我正在使用带有USE_TZ = True 和TIME_ZONE = 'UTC' 的Django 2.1。
这是我的模型 DateTimeField:
create_date = models.DateTimeField(_('date created'), null=True, auto_now_add=True)
我正在尝试根据周数获取当前周结果。我尝试了以下方法:
today = timezone.now()
current_week_num = today.isocalendar()[1]
week_results = MyModel.objects.filter(create_date__week=current_week_num).count()
当数据库中有记录时,这总是返回 0。如果我设置USE_TZ = False,它工作正常。我正在使用 MySql 数据库。
有什么想法吗?
更新:
问题在于 MySQL time_zone 表为空!我不得不跑: mysql_tzinfo_to_sql /usr/share/zoneinfo 问题就解决了!
【问题讨论】:
-
Iso 周从星期一开始。您确定不只是上周创建的记录吗?
-
@HåkenLid 我在数据库中有一条记录是 2018-12-17 11:57:28.892100,即第 51 周(我也尝试通过 50 而不是 current_week_num 但它没有改变)。如果我设置 USE_TZ = False,它会起作用。
-
我已经打印了 USE_TZ true 和 false 的查询。这是我在启用 TZ 的情况下得到的:WEEK(CONVERT_TZ(
create_date, 'UTC', 'UTC'), 3) = 51) 并且在禁用 TZ 的情况下(这是有效的):WEEK(@987654329 @.create_date, 3) = 51) -
mysql 好像没有正确地从 UTC 转换为 UTC?我希望
CONVERT_TZ函数不会更改输入值。也许您必须更改 mysql 服务器的一些时区设置? dev.mysql.com/doc/refman/8.0/en/time-zone-support.html -
问题是 MySQL 表 time_zone 是空的。运行命令 mysql_tzinfo_to_sql /usr/share/zoneinfo 后它起作用了!谢谢。