У меня проблема с моим приложением, которое читает из JSON API, который предоставляет мне время в формате UTC в следующем формате:
2019-09-19T23:46:00.1183275Z
Я храню этираз в базе данных Postgres, используя Entity Framework Core и позже, чтобы убедиться, что я получаю только новые данные из API.Проблема, с которой я сталкиваюсь, заключается в том, что, когда эти временные метки записываются в базу данных, я теряю точность, которой обладает .NET, вплоть до отметок временной метки.C # имеет отметки для вышеуказанной отметки времени как: 637045335601183275
, но когда я читаю то же самое время обратно из базы данных, отметки 637045335601183270
.
Я попытался найти документацию, но не смог найтиспособ изменить точность отметки времени в базе данных.Есть ли способ?В противном случае существует ли согласованный способ округлить DateTime
с точностью, которая не будет потеряна базой данных?
Пример:
Контекст
public class MyContext : DbContext
{
public DbSet<Item> Items { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(@"host=localhost;port=5432;database=TestDb;user id=postgres;password=password");
}
}
Элемент
public class Item
{
public int Id { get; set; }
public DateTime CreateTime { get; set; }
}
Программа
class Program
{
static void Main(string[] args)
{
var item = JsonConvert.DeserializeObject<Item>("{Id: 1, CreateTime: \"2019-09-19T23:46:00.1183275Z\"}");
Item readItem;
using(var context = new MyContext())
{
context.Items.Add(item);
context.SaveChanges();
}
using(var context = new MyContext())
{
readItem = context.Items.First();
}
Console.WriteLine(item.CreateTime.Ticks.Equals(readItem.CreateTime.Ticks)); //Outputs False
}
}
Выше создано с помощью EFCore 2.2.6 и Npgsql.EntityFrameworkCore.PostgreSQL 2.2.4