为什么将可为空的 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 日,以防日期值不可用。
当我将 可为空的日期时间 设置为 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 ofDateTime
, which is December 31, 9999 in the Gregorian calendar.
您的日期值刚好高于此值,因此异常。
我建议在数据库中明确保存一个非常大的日期值,例如9999 年 12 月 31 日,以防日期值不可用。