PostgreSQL不保存完整的DateTimeOffset。

4
我遇到了一个看起来似乎是PostgreSQL或Devart数据库连接库出现了错误的问题。以下是我创建的一个简单测试应用程序:
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作为数据库,则此测试可以正常工作。是否可以更改PostgreSQL设置来解决这个问题?
1个回答

3

如果CreatedOn是PostgreSQL时间戳,则精度为1微秒。1个tick为0.1微秒。


我明白了,有没有办法增加时间戳的精度?我猜应该没有。 - GBreen12
你可以存储时间戳。64位整数(bigint)足以存储你的时间戳。如果你不想在程序中使用时间戳,你可以将时间戳存储为后备字段,然后使用DateTime未映射字段。 - bubi
好主意,我可能得这么做。谢谢你的帮助。 - GBreen12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接