字符串未被识别为数据集中的有效日期时间



我有一个数据集从SQL服务器绑定在aspx页面上的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

更多类型请参阅日期和时间数据类型和函数(Transact-SQL)

因此,在SQL Server中,

的显示应该无关紧要,因为没有实际的显示或与类型相关的格式化。您在SSMS的查询窗口中碰巧看到的内容确实具有格式化,但只是因为它必须以某种方式显示,这种格式化通常以ISO8601表示法完成,与实例实际持久化的方式无关。

返回的实例在你的。net代码从Sql Server应该是类型System.DateTimeSystem.DateTimeOffset,后者,如果你也使用DateTimeOffset在Sql Server从UTC与实例的持续偏移。然后,您可以使用ToString()和各种格式化选项来显示您认为合适的DateTime。如何显示/格式化DateTime应该始终是一个表示层函数,而不是程序堆栈中更深的函数。

请参阅自定义日期和时间格式字符串,了解.net DateTime实例可用的各种格式字符串选项


回到OP

中的相关代码
<asp:Label Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd") %>' 
应该删除

Convert.ToDateTime,因为变量date1 应该已经是DateTime实例(如果您遵循上面概述的最佳实践,则)。然后,您可以使用所需的格式字符串直接在该实例上调用ToString

最新更新