为什么将可为空的 DateTime 设置为 DateTime.Max 会导致 psql 解析错误?

Why does setting a nulalble DateTime to DateTime.Max cause a pgsql parsing error?

当我将 可为空的日期时间 设置为 DateTime.Max 并将其保存到 postgres 类型的数据库字段时

timestamp without time zone

它保存为

10000-01-01 00:00:00

然后,当我重新加载一个只读取此 table 的页面时,我收到以下错误:

System.InvalidCastException: Specified cast is not valid.

a) 是日期时间吗?正确的 C# 转换类型? b) 设置 DateTime 值的最佳方法是什么?

我查看了此处的文档 http://www.postgresql.org/docs/9.2/static/datatype-datetime.html,它指定最大值为 294276 AD...但该值低于当前设置的值,因此不可能破坏它。我正在使用最新版本的 NpgSql 和 entity framework

非常感谢

问题出在您的 C# 代码中。根据 MSDN:

The DateTime.MaxValue field represents the largest possible value of DateTime, which is December 31, 9999 in the Gregorian calendar.

您的日期值刚好高于此值,因此异常。

我建议在数据库中明确保存一个非常大的日期值,例如9999 年 12 月 31 日,以防日期值不可用。