1
resposta

DateTime Não retorna hora

O get não retorna a hora apenas a data, qual seria o motivo ?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

este é meu codigo GET.

no swagger a data aparece assim :

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

a data aparece corretamente, porem a hora não.

Minha classe Transação define um dateTime:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como resolver ? Preciso que apareça a hora também

1 resposta

Olá Victor.

Tudo bem?

Pelo que você descreveu e pelas imagens fornecidas, parece que o seu problema está relacionado à serialização de datas no retorno do seu método GET. No JSON que você mostrou, a data está aparecendo no formato ISO 8601, que é o padrão para representação de datas e horários em texto, e inclui a hora (neste caso, "00:00" indica meia-noite).

Se a hora está sempre aparecendo como "00:00", isso pode indicar que a hora não está sendo definida corretamente em algum ponto do seu processo, ou que a serialização está configurada para usar apenas a data. Aqui estão algumas sugestões para resolver este problema:

  1. Verifique se a hora está sendo corretamente armazenada no banco de dados. Se você estiver usando o Entity Framework, certifique-se de que o tipo da coluna no banco de dados é datetime ou datetime2, que podem armazenar tanto a data quanto a hora.

  2. Confira se a hora está sendo definida corretamente quando você cria ou atualiza a entidade Transacao. Se a hora não for definida, ela será automaticamente configurada para meia-noite.

  3. Se você estiver usando o ASP.NET Core, pode ser uma configuração de serialização JSON que está omitindo a hora. Verifique as configurações de serialização no seu Startup.cs ou onde você configura o MVC. Por exemplo, se você estiver usando o System.Text.Json, você pode configurar o formato de data e hora assim:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.WriteIndented = true;
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
        options.JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
    });

E o JsonDateTimeConverter seria algo como:

public class JsonDateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return DateTime.Parse(reader.GetString());
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"));
    }
}
  1. Se você estiver usando o Newtonsoft.Json, você pode configurar o formato da seguinte forma:
services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss.fffZ";
    });
  1. Por fim, verifique se não há nenhum atributo ou configuração que esteja formatando a data para excluir a hora quando a entidade Transacao é serializada para JSON.

Espero que essas sugestões ajudem a resolver o problema com a hora não aparecendo no seu objeto DateTime. Se ainda assim não funcionar, pode ser necessário investigar mais a fundo o fluxo de dados desde o momento em que a transação é criada até o ponto em que ela é serializada para o retorno do método GET. Tenta debugar cada parte, cada método para ver se a hora aparece em algum ponto.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.