class ExtractSecond(expression, tzinfo=None, **extra)
[source]
-
lookup_name = 'second'
These are logically equivalent to Extract('datetime_field', lookup_name)
. Each class is also a Transform
registered on DateTimeField
as __(lookup_name)
, e.g. __minute
.
DateTimeField
examples:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | >>> from datetime import datetime >>> from django.utils import timezone >>> from django.db.models.functions import ( ... ExtractYear, ExtractMonth, ExtractDay, ExtractWeekDay, ... ExtractHour, ExtractMinute, ExtractSecond, ... ) >>> start_2015 = datetime( 2015 , 6 , 15 , 23 , 30 , 1 , tzinfo = timezone.utc) >>> end_2015 = datetime( 2015 , 6 , 16 , 13 , 11 , 27 , tzinfo = timezone.utc) >>> Experiment.objects.create( ... start_datetime = start_2015, start_date = start_2015.date(), ... end_datetime = end_2015, end_date = end_2015.date()) >>> Experiment.objects.annotate( ... year = ExtractYear( 'start_datetime' ), ... month = ExtractMonth( 'start_datetime' ), ... day = ExtractDay( 'start_datetime' ), ... weekday = ExtractWeekDay( 'start_datetime' ), ... hour = ExtractHour( 'start_datetime' ), ... minute = ExtractMinute( 'start_datetime' ), ... second = ExtractSecond( 'start_datetime' ), ... ).values( ... 'year' , 'month' , 'day' , 'weekday' , 'hour' , 'minute' , 'second' , ... ).get(end_datetime__year = ExtractYear( 'start_datetime' )) { 'year' : 2015 , 'month' : 6 , 'day' : 15 , 'weekday' : 2 , 'hour' : 23 , 'minute' : 30 , 'second' : 1 } |
When USE_TZ
is True
then datetimes are stored in the database in UTC. If a different timezone is active in Django, the datetime is converted to that timezone before the value is extracted. The example below converts to the Melbourne timezone (UTC +10:00), which changes the day, weekday, and hour values that are returned:
1 2 3 4 5 6 7 8 9 10 11 | >>> import pytz >>> tzinfo = pytz.timezone( 'Australia/Melbourne' ) # UTC+10:00 >>> with timezone.override(tzinfo): ... Experiment.objects.annotate( ... day = ExtractDay( 'start_datetime' ), ... weekday = ExtractWeekDay( 'start_datetime' ), ... hour = ExtractHour( 'start_datetime' ), ... ).values( 'day' , 'weekday' , 'hour' ).get( ... end_datetime__year = ExtractYear( 'start_datetime' ), ... ) { 'day' : 16 , 'weekday' : 3 , 'hour' : 9 } |
Explicitly passing the timezone to the Extract
function behaves in the same way, and takes priority over an active timezone:
1 2 3 4 5 6 7 8 9 10 | >>> import pytz >>> tzinfo = pytz.timezone( 'Australia/Melbourne' ) >>> Experiment.objects.annotate( ... day = ExtractDay( 'start_datetime' , tzinfo = melb), ... weekday = ExtractWeekDay( 'start_datetime' , tzinfo = melb), ... hour = ExtractHour( 'start_datetime' , tzinfo = melb), ... ).values( 'day' , 'weekday' , 'hour' ).get( ... end_datetime__year = ExtractYear( 'start_datetime' ), ... ) { 'day' : 16 , 'weekday' : 3 , 'hour' : 9 } |
Please login to continue.