2015-07-02 2 views
1

Я столкнулся с тем, что кажется ошибкой с PostgreSQL или библиотекой соединений базы данных Devart. Ниже простой тест приложение, которое я создал:PostgreSQL не сохраняет полную дату DateTimeOffset

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace DateTimeOffsetTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var context = new Context()) 
      { 
       var e = new Ent() { CreatedOn = DateTimeOffset.Now }; 
       Console.WriteLine(e.CreatedOn.UtcDateTime.Ticks); 
       context.Ents.Add(e); 
       context.SaveChanges(); 
      } 

      using (var context = new Context()) 
      { 
       var ent = context.Ents.Single(); 

       Console.WriteLine(ent.CreatedOn.UtcDateTime.Ticks); 
       Console.Read(); 

       context.Ents.Remove(ent); 
       context.SaveChanges(); 
      } 
     } 
    } 
} 

Я хотел бы ожидать, что эти две строки записываются в консоль будет то же самое, но вторая всегда имеет значение 0 в последней цифре. Пример:

Test output

Это прецизионный проблема с тем, как PostgreSQL настройки и если да, то я могу изменить, что-то? Этот тест отлично работает, если я использую SqlServer в качестве моей базы данных.

ответ

1

Если CreatedOn является меткой времени PostgreSQL, точность составляет 1 микросекунду. 1 тик. .1 микросекунды.

+0

Я вижу, есть ли способ увеличить точность метки времени? Я принимаю не – GBreen12

+0

Вы можете хранить тики. Для ваших временных меток достаточно целого числа 64 бит (bigint). Если вам не нравится использовать тики в вашей программе, вы можете сохранить тики в качестве поля поддержки, а затем использовать поле DateTime, а не отображаемое. – bubi

+0

. Хорошо, мне, возможно, придется это сделать. Спасибо за помощь – GBreen12