我有一个数据集从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.DateTime
或System.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
。