【发布时间】:2015-09-02 14:03:39
【问题描述】:
PostgreSQL 中有一种用于存储没有时间的日期的数据类型。在 C# 中存储没有时间的日期的最佳数据类型是什么?
我们知道,DateTime 可以与 00:00:00 时间一起使用,但这对外部用户来说非常具有误导性,而且日期也没有时区,但 DateTime 有。 NodaTime 不能在我们的项目中使用,所以我们正在寻找原生的.NET 解决方案。
【问题讨论】:
-
您的“外部用户”将如何阅读日期?我会说立即使用 ISO 8601 格式。所以在内部使用 DateTime,并将它们打印为
YYYY-MM-DD。 -
@CodeCaster 这不仅仅是显示问题。例如,比较日期应该不强制您将所有内容转换为相同的时区。这是与旅行相关的应用程序中的真正痛苦。同样,比较时间不应强迫您使用任意日期作为基准。
-
@PanagiotisKanavos 我非常了解 BCL 的
DateTime结构的时区和时间问题,但我没有看到 OP 谈论时区。虽然现在或将来有很多软件需要处理时区,但如果 OP 的日期都在同一个时区并且总是如此,那么使用时间部分为“00:00”的 DateTime 不会伤害任何人。 OP 遇到的唯一问题是显示/导出部分,对此我提出了一个带有问题的解决方案 - OP 没有回答。 -
@CodeCaster OP 确实提到了时区,它们确实会影响转换和比较 - 除非 所有 日期都是 UTC,即使是从输入参数中检索到的日期也是如此在 MVC 操作中或从 SQL Server 中的
date字段中检索时,当您比较具有不同 DateTimeKind 的值时,将会出现意外的时区转换。 -
@PanagiotisKanavos 我提到了“没有时区”,即所有日期都在同一个时区。当然有警告,但考虑到限制,您似乎正在解决一个非问题,
System.DateTime在这里很好。在比较不同类型的 DateTime 时,您 don't need to convert them。是的,使用 DateTime 有其注意事项,但它并不像您声称的那样无法使用。如果所有 OP 想要输出一个日期,DateTime.ToString("YYYY-MM-DD")可以是一个可行的解决方案。
标签: c# .net postgresql