Time difference in queryset output(Timezone)

Hello goodnight. [Google Translate]

I’m creating a queryset filtering by date, and the “criado_em” which is a DateTimeField is different.

Queryset:
data_inicio = “2022-05-01”
data_fim = “2022-05-03”

queryset = PrecoEnviado.objects.filter(
criado_em__date__gte=data_inicio,
criado_em__date__lte=data_fim,
).select_related(“posto”, “usuario”, “usuario__perfilusuario”, “posto__informacaoposto”, “posto__informacaoposto__municipio”, “posto__informacaoposto__municipio__estado”, “posto__informacaoposto__distribuidor”).only(“id”, “atualizado_em”, “criado_em”, “usuario_id”, “posto_id”, “status”, “usuario__id”, “usuario__first_name”, “usuario__last_name”, “usuario__is_motoboy”, “usuario__phone_number”, “posto__id”, “posto__razao_social”)

Query:
SELECT “postos_precoenviado”.“id”, “postos_precoenviado”.“criado_em”, “postos_precoenviado”.“atualizado_em”, “postos_precoenviado”.“posto_id”, “postos_precoenviado”.“usuario_id”, “postos_precoenviado”.“status”, “postos_posto”.“id”, “postos_posto”.“razao_social”, “postos_informacaoposto”.“id”, “postos_informacaoposto”.“criado_em”, “postos_informacaoposto”.“atualizado_em”, “postos_informacaoposto”.“deletado”, “postos_informacaoposto”.“posto_id”, “postos_informacaoposto”.“nr_autoriz”, “postos_informacaoposto”.“cod_simp”, “postos_informacaoposto”.“distribuidor_id”, “postos_informacaoposto”.“dtvinc_distribuidor”, “postos_informacaoposto”.“dtpubli_dou_autoriz”, “postos_informacaoposto”.“endereco”, “postos_informacaoposto”.“endereco_formatado”, “postos_informacaoposto”.“complemento”, “postos_informacaoposto”.“bairro”, “postos_informacaoposto”.“cep”, “postos_informacaoposto”.“municipio_id”, “postos_distribuidor”.“id”, “postos_distribuidor”.“criado_em”, “postos_distribuidor”.“atualizado_em”, “postos_distribuidor”.“deletado”, “postos_distribuidor”.“nome”, “postos_distribuidor”.“logo”, “postos_distribuidor”.“internal_id”, “core_municipio”.“id”, “core_municipio”.“nome”, “core_municipio”.“nome_sem_acentos”, “core_municipio”.“estado_id”, “core_municipio”.“cod”, “core_estado”.“id”, “core_estado”.“nome”, “core_estado”.“nome_sem_acentos”, “core_estado”.“uf”, “core_estado”.“cod”, “usuarios_user”.“id”, “usuarios_user”.“first_name”, “usuarios_user”.“last_name”, “usuarios_user”.“phone_number”, “usuarios_user”.“is_motoboy”, “usuarios_perfilusuario”.“id”, “usuarios_perfilusuario”.“criado_em”, “usuarios_perfilusuario”.“atualizado_em”, “usuarios_perfilusuario”.“deletado”, “usuarios_perfilusuario”.“usuario_id”, “usuarios_perfilusuario”.“cpf”, “usuarios_perfilusuario”.“birthdate”, “usuarios_perfilusuario”.“chave_pix”, “usuarios_perfilusuario”.“codigo_membro_usuario” FROM “postos_precoenviado” INNER JOIN “postos_posto” ON (“postos_precoenviado”.“posto_id” = “postos_posto”.“id”) LEFT OUTER JOIN “postos_informacaoposto” ON (“postos_posto”.“id” = “postos_informacaoposto”.“posto_id”) LEFT OUTER JOIN “postos_distribuidor” ON (“postos_informacaoposto”.“distribuidor_id” = “postos_distribuidor”.“id”) LEFT OUTER JOIN “core_municipio” ON (“postos_informacaoposto”.“municipio_id” = “core_municipio”.“id”) LEFT OUTER JOIN “core_estado” ON (“core_municipio”.“estado_id” = “core_estado”.“id”) LEFT OUTER JOIN “usuarios_user” ON (“postos_precoenviado”.“usuario_id” = “usuarios_user”.“id”) LEFT OUTER JOIN “usuarios_perfilusuario” ON (“usuarios_user”.“id” = “usuarios_perfilusuario”.“usuario_id”) WHERE ((“postos_precoenviado”.“criado_em” AT TIME ZONE ‘America/Sao_Paulo’)::date >= 2022-05-01 AND (“postos_precoenviado”.“criado_em” AT TIME ZONE ‘America/Sao_Paulo’)::date <= 2022-05-03) ORDER BY “postos_precoenviado”.“id” DESC

data on the basis:
ID|criado_em
436767|2022-05-05 07:55:57.682 -0300

When I analyze the collected data:
ID|Criado_em
436767|2022-05-05 10:55:57.682633+00:00

Realize that the time is different, 3 hours ahead.

How can I solve this hours issue without disabling the settings.py timezone?
Is it possible in the query or in the filter not to use the timezone?

Those are two different representations of the same time.

If you want to do a filter with a date time field, then you want to ensure you’re passing the right date time field as the parameter to the query.

If you’re only interested in the date, then you want to define the field as a date field, not as a date time field. Then you would be able to pass the date as the parameter. Time zones would not be an issue.

So you need to clarify the requirements for those fields. Are they date fields or date time fields? If they’re date time fields, then you must address the time zone issues to ensure proper handling of your data.

Hi KenWhitesell, thanks for replying.

I want to use only the date as a filter, but I don’t want the data time to change and I don’t want the filter to catch missing data because of this advance in the base datetime.

My biggest fear is arriving at 11 pm and automatically not getting back to me.