1

日付でdjangoモデルフィルターを使用しました。

原産地データにはアフリカ/アビジャン(UTC+00:00)の時刻があり、このデータをデータベースに保存しています。

Asia/Seoul (UTC+09:00) に関するタイムゾーンを設定し、データベースに適切に保存しました。

しかし、time_range=[2015-11-15, 2015-11-16] でデータをフィルタリングすると、15 時から 14 時までのデータが得られました。0時から23時までのデータを取得したい。

どうすればこれを入手できますか? この urlを実行しますが、うまく機能しません。

class Post(models.Model):
    created_time = models.DateTimeField()

投稿のようなモデルがあり、ユーザーから日付を取得するとします。

input_date = '2015-11-16' (from user)
from_date = datetime.strptime(input_date, '%Y-%m-%d').date()
to_date = from_date + datetime.timedelta(days=1)
posts = Post.objects.filter(created_time__range=[from_date, to_date])

上位コードを使用して、2015-11-15 15:00:00 から 2015-11-16 14:00:00 までのデータを取得しました。

ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力

4

1 に答える 1

1

2015-11-16 00:00から2015-11-16 23:59:99までの範囲の日時を取得するためにできることは次のとおりです。

from datetime import datetime as dt
import datetime 

input_date = '2015-11-16'
# convert string to datetime
from_date = dt.strptime(input_date, '%Y-%m-%d').date()
# combine `from_date` with min time value (00:00)
from_date = datetime.datetime.combine(from_date, datetime.time.min)
# combine `from_date` with max time value (23:59:99) to have end date
to_date = datetime.datetime.combine(from_date, datetime.time.max)
posts = Post.objects.filter(created_time__range=(from_date, to_date))

次のものも使用できます。

from datetime import datetime

input_date = '2015-11-16'
# convert string to datetime
from_date = datetime.strptime(input_date, '%Y-%m-%d').date()
posts = Post.objects.filter(
    created_time__year=from_date.year, 
    created_time__month=from_date.month,
    created_time__day=from_date.day,
)

あなたの場合、使用:

datetime.datetime.combine(from_date,datetime.time.max).replace(tzinfo=timezone.utc)
于 2015-11-20T01:22:58.197 に答える