例如,以下是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
。所以,有两个问题:
PostgreSQL
中存储DateTime
的合适方式是什么,这样我就不会丢失任何精度?我在考虑将多个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 };
的2个日期时间
我目前的解决方案,这是一种工作..但是我在这里失去了太多的精确度:
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
库4.0.0版、.net框架4.5ish、windows 10
发布于 2018-06-30 05:03:31
PostgreSQL的时间戳有微秒的精度限制。
如果需要更多,可以将纳秒存储在单独的bigint
属性中。
https://stackoverflow.com/questions/51103606
复制相似问题