我有一个来自 SQL 服务器的数据集,它在 aspx 页面上绑定(bind)了 gridview。我使用以下代码在网页上发布日期:
<asp:Label ID="Label10" runat="server" Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd") %>'
SQL 服务器上的日期时间是 2015-12-06 00:00:00.000,在网页上显示为 2015/06/12。正确的日期应该是 2015/12/06(2015 年 12 月 6 日)。我在 webconfig 上有全局化。
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US"/>
谁能告诉我如何解决这个问题?
最佳答案
SQL Server 应该将日期保留为以下类型之一,并且永远不会作为其他任何东西(我指的是 varchar
、text
、int
、BigInt
或其他任何“创意”)
DateTime2
DateTime
Date
DateTimeOffset
更多类型请引用Date and Time Data Types and Functions (Transact-SQL)
因此,SQL Server 中的显示应该永远不会重要,因为没有与该类型关联的实际显示或格式。您碰巧在 SSMS 的查询窗口中看到的内容确实具有格式,但只是因为它必须以某种方式显示,这种格式通常以 ISO8601 表示法完成,与实例的实际持久化方式无关。
来自 Sql Server 的 .NET 代码中返回的实例应该是
System.DateTime
类型。或 System.DateTimeOffset
, 后者如果你也在使用 DateTimeOffset
在 Sql Server 中,它与实例保持 UTC 的偏移量。然后您可以使用 ToString()
使用各种格式选项来显示您认为合适的日期时间。 DateTime 如何显示/格式化应该始终是一个表示层函数,并且永远不会比程序堆栈中的更深。见 Custom Date and Time Format Strings对于 .net DateTime 实例可用的各种格式字符串选项
回到 OP 中的相关代码
<asp:Label Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd") %>'
Convert.ToDateTime
应作为变量 date1
删除应该 已经是 DateTime
实例(如果您遵循上述最佳实践)。然后您可以调用ToString
在该实例上直接使用所需的格式字符串。
关于sql - 字符串未被识别为数据集中的有效日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623226/