月フィルタリングするフィルタすることはできません)(DjangoのORMのobjects.filterで

クエリの属性ジャンゴフィルター日付:年、月、日、WEEK_DAY、時、分、秒

プロジェクトレビューブログをやって、私は窓からLinuxプロジェクトに移動し、その後の記事は、月の結果に従ってフィルタリング作品は、空に常にあることをアーカイブするブログ。そして、ビットBaiduの、結果は問題領域です。

Djangoのsettings.py設定ファイルでは、そこに時間と時間帯に関連する2つの設定パラメータは今ある、とUSE_TZはTIME_ZONEです

デフォルト設定ジャンゴTIME_ZONEタイムゾーンアメリカ/シカゴ

別のタイムゾーンにTIME_ZONEセットが、その後の状況も指している場合:

  • それはWindowsシステムの場合は、TIME_ZONEの設定は無用である、Djangoは機械の時間を使用します。
  • このように設定USE_TZ = Falseの、TIME_ZONEなどの他のシステム、使用のゾーンの時間は、=「アジア/上海」、上海はUTC時間を使用している場合。

ジャンゴクエリのMySQLを使用して、データベースのORM文は時間帯機能USE_TZ =真に対処するための時間が来て、対応するには、このようなconvert_tz(時間伝達関数)などの機能を有効にすると、我々はプロジェクトDjangoの設定ファイルに設定され、地区TIME_ZONEの設定=「アジア/上海のが、MySQLは、正しい時刻アジア/上海を取得することはできませんので、MySQLの上海このタイムゾーンを知っているし、クエリが空のリストを返すときはありません。

最終的な解決策で初:

# 可以使用如下方式进行筛选,筛选的值格式和你DB中的格式对应,比如是2019/04/12还是2017-04-12
article_list = ArticleModel.objects.filter(status='p', add_time__startswith='2019-04-12').order_by('-add_time')

#如果只想根据年月来筛选就是
article_list = ArticleModel.objects.filter(status='p', add_time__startswith='20179-04').order_by('-add_time')

「2019から5」への必要性から、すなわち2019年5月には、0を追加するために、データベースの必要性に合わせて、月と10ヶ月未満「は2019から05」になることに注意してください

解決策1:

USE_TZ =偽:直接setting.pyファイルに

しかし、その後、あなたは、時間帯機能のジャンゴを使用することはできません。(8時間後にはほとんどの時間になり、データベースに格納されています)

解決策2:

2つのシステムが自然にこのファイルのタイムゾーンの変換が含まれていない示したように、それは、Windowsのタイムゾーンの変換をサポートしていません書かれたMySQLの公式ドキュメント:

リンクスであれば示すように、直接、次のコマンドを実行します。

Microsoft Windowsをお使いの場合:
あなたは、ファイルmysqlのゾーンをダウンロードするとします。https://dev.mysql.com/downloads/timezones.html

 Cにコピー:\ \ \ MySQLサーバの\データmysqlディレクトリはProgramDataのMySQL 5.7 \
       再起動MySQLの
       ログmysqlの、実行:
        SET TIME_ZONE GLOBAL = '上海のアジア/';
        SET TIME_ZONE SESSION = '上海のアジア/';
        SELECT @@グローバル。 TIME_ZONE、@@ session.time_zone。

出典ます。https://blog.csdn.net/gmsGms_gms/article/details/80748208

ジャンゴタイムゾーンについて:

ノートのジャンゴドキュメント:タイムゾーンを使用する場合は、データベースに格納されているすべての日付と時刻の情報DjangoはタイムゾーンUTCにあるユーザーのタイムゾーンに変換Webページ上のフロントデスクのユーザーが、配置されている背景時々日時ゾーンに勝ちます。

すなわち:
ジャンゴあなたは内部DjangoのすべてのUTC時間として時間(北京時間はUTC + 8である)の治療を可能にするタイムゾーン機能を開いた場合。全て(例えば、データベースのMySQLに格納されている)ストレージと内部処理(バックグラウンドで様々な時間処理)、及びディスプレイの形態であっても、ダイレクトプリントが全てUTCです。

テンプレート入力時、時間が戻ってUTC時間にテンプレート出力時間(UTC背景全時間)アプリケーションサポートしない限り、時間のユーザの場所(に変換UTC時間に入るこのとき、ユーザーが自分のタイムゾーンを設定する場合は、通常我々は、テンプレートのタイムゾーンの問題を気にしない。ショータイムテンプレートがセットsettings.TIME_ZONEに使用されるときに、自動的にタイムゾーンsettings.TIME_ZONEの嘘をレンダリングUTC時刻時刻に変換されます。)

USE_TZ =真を有効にした後、2つの点を次のことを保証するために、処理時間の時:

  • UTC時刻ことを保証するために、データベースに格納されています。
  • 場合関数(バックグラウンド処理)がUTC時刻に変換されていることを確認するまでの間の経過時間パラメータ。

例えば、通常はAを使用して現在の時刻を取得

import datetime
now = datetime.datetime.now()

USE_TZ =真を有効にした後、必要が書き込まれます

import datetime 
from django.utils.timezone import utc
utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)

转自:https://www.cnblogs.com/ChangAn223/p/10928230.html

クエリの属性ジャンゴフィルター日付:年、月、日、WEEK_DAY、時、分、秒

プロジェクトレビューブログをやって、私は窓からLinuxプロジェクトに移動し、その後の記事は、月の結果に従ってフィルタリング作品は、空に常にあることをアーカイブするブログ。そして、ビットBaiduの、結果は問題領域です。

Djangoのsettings.py設定ファイルでは、そこに時間と時間帯に関連する2つの設定パラメータは今ある、とUSE_TZはTIME_ZONEです

デフォルト設定ジャンゴTIME_ZONEタイムゾーンアメリカ/シカゴ

別のタイムゾーンにTIME_ZONEセットが、その後の状況も指している場合:

  • それはWindowsシステムの場合は、TIME_ZONEの設定は無用である、Djangoは機械の時間を使用します。
  • このように設定USE_TZ = Falseの、TIME_ZONEなどの他のシステム、使用のゾーンの時間は、=「アジア/上海」、上海はUTC時間を使用している場合。

ジャンゴクエリのMySQLを使用して、データベースのORM文は時間帯機能USE_TZ =真に対処するための時間が来て、対応するには、このようなconvert_tz(時間伝達関数)などの機能を有効にすると、我々はプロジェクトDjangoの設定ファイルに設定され、地区TIME_ZONEの設定=「アジア/上海のが、MySQLは、正しい時刻アジア/上海を取得することはできませんので、MySQLの上海このタイムゾーンを知っているし、クエリが空のリストを返すときはありません。

最終的な解決策で初:

# 可以使用如下方式进行筛选,筛选的值格式和你DB中的格式对应,比如是2019/04/12还是2017-04-12
article_list = ArticleModel.objects.filter(status='p', add_time__startswith='2019-04-12').order_by('-add_time')

#如果只想根据年月来筛选就是
article_list = ArticleModel.objects.filter(status='p', add_time__startswith='20179-04').order_by('-add_time')

「2019から5」への必要性から、すなわち2019年5月には、0を追加するために、データベースの必要性に合わせて、月と10ヶ月未満「は2019から05」になることに注意してください

解決策1:

USE_TZ =偽:直接setting.pyファイルに

しかし、その後、あなたは、時間帯機能のジャンゴを使用することはできません。(8時間後にはほとんどの時間になり、データベースに格納されています)

解決策2:

2つのシステムが自然にこのファイルのタイムゾーンの変換が含まれていない示したように、それは、Windowsのタイムゾーンの変換をサポートしていません書かれたMySQLの公式ドキュメント:

リンクスであれば示すように、直接、次のコマンドを実行します。

Microsoft Windowsをお使いの場合:
あなたは、ファイルmysqlのゾーンをダウンロードするとします。https://dev.mysql.com/downloads/timezones.html

 Cにコピー:\ \ \ MySQLサーバの\データmysqlディレクトリはProgramDataのMySQL 5.7 \
       再起動MySQLの
       ログmysqlの、実行:
        SET TIME_ZONE GLOBAL = '上海のアジア/';
        SET TIME_ZONE SESSION = '上海のアジア/';
        SELECT @@グローバル。 TIME_ZONE、@@ session.time_zone。

来源:https://blog.csdn.net/gmsGms_gms/article/details/80748208

关于django中的时区:

django文档中有说明:当使用时区时,Django存储在数据库中的所有日期时间信息都以UTC时区为准,在后台使用有时区的datetime,前台用户使用时,在网页上翻译成用户所在的时区。

即:
Django 如果开启了 Time Zone 功能,即让 Django 内部把时间全部当成 UTC 时间(北京时间为 UTC+8 )对待。所有的存储(如存储到mysql数据库)和内部处理(在后台的各种时间处理),甚至包括直接 print 显示全都是 UTC 形式的。

这个时候,在通过模板输入时间时,会把输入的时间转换成UTC的时间,在通过模板输出时间的时候,回把UTC时间(后台都是UTC时间)转换成用户所在地的时间(除非应用支持用户设置自己所在的时区,通常我们不需要关心模板的时区问题。模板在展示时间的时候,会使用 settings.TIME_ZONE 中的设置自动把 UTC 时间转成 settings.TIME_ZONE 所在时区的时间渲染。)

启用 USE_TZ = True 后,在处理时间的时候要保证下面两点:

  • 保证存储到数据库中的是 UTC 时间;
  • 在函数之间传递时间参数时(后台处理)确保时间已经转换成 UTC 时间;

比如,通常获取当前时间用的是

import datetime
now = datetime.datetime.now()

启用 USE_TZ = True 后,需要写成

import datetime 
from django.utils.timezone import utc
utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)

转自:https://www.cnblogs.com/ChangAn223/p/10928230.html

おすすめ

転載: www.cnblogs.com/aizhinong/p/12313054.html