首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不损失精度的情况下在PostgreSQL中存储DateTime

在不损失精度的情况下在PostgreSQL中存储DateTime
EN

Stack Overflow用户
提问于 2018-06-29 22:06:58
回答 1查看 1.1K关注 0票数 1

例如,以下是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。所以,有两个问题:

  1. PostgreSQL中存储DateTime的合适方式是什么,这样我就不会丢失任何精度?

我在考虑将多个UNIX毫秒保存到Integer字段中,而不是将DateTime保存为Timestamp,即:

代码语言:javascript
复制
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 };

  1. Alternatively,如何比较具有最高精度(C#/PostgreSql)?

的2个日期时间

我目前的解决方案,这是一种工作..但是我在这里失去了太多的精确度:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-30 05:03:31

PostgreSQL的时间戳有微秒的精度限制。

如果需要更多,可以将纳秒存储在单独的bigint属性中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51103606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档