简体   繁体   中英

Filter objects with a datetime range (00:00 to 23:59:99) in Django

I used django model filter with date.

Origin data has time of Africa/Abidjan(UTC+00:00) and I save this data on my database.

I set timezone about Asia/Seoul(UTC+09:00)and it's save well in my database.

But I filter data with time_range=[2015-11-15, 2015-11-16], I got data about from 15 o'clock to 14 o'clock. I want to get data from 0 o'clock to 23 o'clock.

How can I get this? I do this url , but it doesn't work well.

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

If I have a model like post, and I get date from user.

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])

I used upper code and got data from 2015-11-15 15:00:00 to 2015-11-16 14:00:00.

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

Here is what you can to to have a range datetime from 2015-11-16 00:00 to 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))

You can also use :

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,
)

In your case, use :

datetime.datetime.combine(from_date,datetime.time.max).replace(tzinfo=timezone.utc)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM