处理方法

  • 原因MySQL官网有解释

    MySQL安装过程会创建时区表,但默认是不加载的,需要自己手动加载。
    加载时区信息不一定是一次性操作,因为该信息会偶尔更改。发生此类更改时,使用旧规则的应用程序将过时,您可能会发现有必要重新加载时区表,以使MySQL服务器使用的信息保持最新。

  • 解决方法
1
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
  • 为了保险起见,还是多了解几种查询方式比较好。

时间筛选方式

直接使用__year、__month、__day、__week_day

1
User.object.filter(start_time__year=2019)
1
User.object.filter(start_time__month=10)
1
User.object.filter(start_time__day=10)
  • 星期几
1
User.object.filter(start_time__week_day=1)

使用lt、gt范围

  • 大于
1
2
3
import datetime
now = datetime.datetime.now()
User.object.filter(start_time__gt=now)
  • 大于等于
1
User.object.filter(start_time__gte=now)
  • 小于
1
User.object.filter(start_time__lt=now)
  • 小于等于
1
User.object.filter(start_time__lte=now)

使用__range范围

1
2
3
4
5
6
7
8
9
import datetime
import calendar
now = datetime.datetime.now()
# 获取一个月的总天数
days = calendar.monthrange(now.year, now.month)[1]
start_ = datetime.date(now.year, now.month, 1)
end_ = datetime.date(now.year, now.month, days)

User.object.filter(start_time__range=(start_, end_))