1
resposta

Salvar objeto com atributo Data no formato ISO Hibernate no SQL Server

Eu estou recebendo um Json e depois o salvo no banco de dados usando o Hibernate: A data vem no formato:

"creationDate": "2018-09-01T18:16:03.0598201+00:00"

Porém quando a salvo no banco de dados ela fica como:

2018-09-01 15:16:03.0000000

Uma solução que eu conseguir foi usando, porém não acho que seria uma boa opção fazer isso para todos os campos datas no objeto :

var date = TimeZoneInfo.ConvertTimeToUtc(order.CreationDate);
order.CreationDate = date;
public class Order : EntityBase
    {
        [JsonProperty("orderId")]
        public virtual string OrderId { get; set; }

        [JsonProperty("creationDate")]
        public virtual DateTime CreationDate
        { get; set; }
}
1 resposta

Olá Leonan,

Temos possivelmente dois problemas aqui. Primeiro, o tipo DateTime só guarda o valor de milisegundos de 0 a 999. Sendo assim, necessariamente você vai perder pelo menos alguns algarismos significativos na conversão (o que não é bem um problema pois o DateTime do sqlServer não conseguiria guardar de qualquer jeito, já que utiliza a mesma representação. Para resolver isso precisaríamos usar o date... )

Sobre os 3 primeiros dígitos, estou achando que o problema é na construção do DateTime pelo framework a partir da string do json. Você pode imprimir order.CreationDate.Millisecond pra gente saber se o valor está sendo perdido na transformaçao da string pro objeto ou do objeto pro banco?

Abraços