gpt4 book ai didi

c# - EFCore Postgres 时间戳丢失刻度精度

转载 作者:行者123 更新时间:2023-11-29 14:25:57 25 4
gpt4 key购买 nike

我的应用程序遇到问题,该应用程序正在从 JSON API 读取数据,该 API 按以下格式为我提供 UTC 时间:

2019-09-19T23:46:00.1183275Z

我使用 Entity Framework Core 将这些时间存储在 Postgres 数据库中,并在稍后使用它们来确保我只从 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 创建

最佳答案

I tried searching the documentation but I could not find a way to change the precision of the timestamp in the database. Is there a way?

不,没有。

Postgres 日期/时间类型可惜只是准确 to the microsecond (1/1,000,000 秒)。

.NET 日期的测量单位为 100 nanosecond称为刻度的单位(一个刻度是 1/10,000,000 秒)。

由于每微秒有 10 个刻度,.NET 日期无法通过 Postgres 进行往返。

Failing that is there a consistent way to round the DateTime to a precision that won't be lost by the database?

是的 - DateTime 有一个构造函数,它接受 Ticks 。因此,您可以使用 item.CreateTime.Ticks 来获取初始刻度值,以某种方式更改它(决定是否要向上或向下或圆形或其他什么),然后将其传递给构造函数。然后这个值(精确到微秒)可以通过 Postgres 来回传输。

关于c# - EFCore Postgres 时间戳丢失刻度精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58020156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com