我遇到了一个问题,那就是每当我从DateTime
数据库加载大概是Postgresql
的数据并将其与C#的初始值进行比较时-数据都不匹配。例如,这是C#中的原始DateTime
:
日期:{09.07.2018 00:00:00}
壁虱:636667391123714378
时间:{13:18:32.3714378}
从DB
返回的相同日期(保存之后):
日期:{09.07.2018 00:00:00}
壁虱:636667391123714370
时间:{13:18:32.3714370}
保存后,似乎DateTime
失去了一些精度。数据库中的列类型为Timestamp
。因此,有2个问题:
DateTime
中存储PostgreSQL
的正确方法是什么,因此我不会失去任何精度? 我正在考虑将多个UNIX毫秒保存到Integer
字段中,而不是将DateTime
保存为Timestamp
,即:
DateTime myDT = DateTime.Now;
long ms = new DateTimeOffset(myDT).ToUnixTimeMilliseconds();
// how I do it now
var parameterOld =
new Npgsql.NpgsqlParameter("dateInserted", NpgsqlTypes.NpgsqlDbType.Timestamp) {Value = myDT };
// how I think would be a better approach
var parameterNew =
new Npgsql.NpgsqlParameter("dateInserted", NpgsqlTypes.NpgsqlDbType.Integer) { Value = ms };
我当前的解决方案是可行的。但是我在这里失去了太多的精度:
public static bool IsEqualWithLossOfPrecision(this DateTime timestamp1, DateTime timestamp2)
{
return (
timestamp1.Year == timestamp2.Year &&
timestamp1.Month == timestamp2.Month &&
timestamp1.Day == timestamp2.Day &&
timestamp1.Hour == timestamp2.Hour &&
timestamp1.Minute == timestamp2.Minute &&
timestamp1.Millisecond == timestamp2.Millisecond
);
}
欢迎就2个问题提出建议。
我正在使用最新版本的DB(10.4),Npgsql
库v.4.0.0,.net framework 4.5ish,Windows 10
答案 0 :(得分:0)
PostgreSQL的时间戳的精度限制为微秒。
如果需要更多,请将纳秒存储在单独的bigint
属性中。